Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.08.2017, 09:06
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Выбор элемента из списка
Добрый день. Есть следующий js:
jQuery('body').on('click', ' .quo span', function(){
		col = jQuery('.basketForm .quo .form-control').val();
		id = jQuery('.basketForm .quo .form-control').attr('data-id');
		jQuery.ajax({
			url  : '/wp-admin/admin-ajax.php',
			type : 'POST',
			cache: false,
			data: ({
				action : 'change_product',
				col : col,
				id : id,
			}),
			success: function(data){
				jQuery('.order-form').html(data);
			}
		});
	});


И часть таблички с двумя пунктами:
// первый
<td class="quo" data-label="Количество:" data-value="1" data-id="226">
	<span class="down">-</span>
	<input maxlength="15" type="text" onkeyup="buttonOff()" class="form-control" data-id="226" name="update_226" value="1">
	<span class="up">+</span>
</td>
// второй
<td class="quo" data-label="Количество:" data-value="1" data-id="236">
	<span class="down">-</span>
	<input maxlength="15" type="text" onkeyup="buttonOff()" class="form-control" data-id="226" name="update_226" value="1">
	<span class="up">+</span>
</td>


Как правильно получить переменные id и col того пункта, значения которого меняю? Сейчас, берет данные только из первого .quo .form-control, даже если работаю со вторым. Понимаю, что ответ на поверхности, но как правильно? Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 29.08.2017, 09:43
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

var $con=jQuery(this).parents('.quo').find('.form-control'),
    col=$con.val(),
    id=$con.attr('data-id');
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2017, 09:47
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Спасибо большое. Работает на ура...
Ответить с цитированием
  #4 (permalink)  
Старый 29.08.2017, 09:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Янковиц,
думайте сами - элементы span увеличивают/уменьшают количество, вернее "по задумке так", но обработчик же .on('click', ' .quo span', function() этого вообще не делает. К тому же почему обработчик делегирован BODY, эти элементы что динамически добавляются на страницу?
jQuery('.basketForm .quo .form-control') - это коллекция элементов, а обращение к свойству элемента и вернет для первого. А должно быть не так, но сначала бы разобраться с бардаком, что выше описан.
Ответить с цитированием
  #5 (permalink)  
Старый 29.08.2017, 09:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Nexus,
не правильно.
Ответить с цитированием
  #6 (permalink)  
Старый 29.08.2017, 09:52
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Сообщение от laimas Посмотреть сообщение
Янковиц,
думайте сами - элементы span увеличивают/уменьшают количество, вернее "по задумке так", но обработчик же .on('click', ' .quo span', function() этого вообще не делает. К тому же почему обработчик делегирован BODY, эти элементы что динамически добавляются на страницу?
jQuery('.basketForm .quo .form-control') - это коллекция элементов, а обращение к свойству элемента и вернет для первого. А должно быть не так, но сначала бы разобраться с бардаком, что выше описан.
Элементы подгружаются динамически.
Ответить с цитированием
  #7 (permalink)  
Старый 29.08.2017, 09:54
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А где тогда изменение значения поля? И что при каждом изменении поля запрос на сервер?
Ответить с цитированием
  #8 (permalink)  
Старый 29.08.2017, 09:56
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

laimas, если автор задает такие вопросы на форуме, то этот код он явно не сам писал.
Если он его не сам писал, то переписать весь код, чтобы было правильно он не сможет.
Если в этом банальном алгоритме допущены ошибки, то наверняка в остальном коде можно найти и что поинтереснее.

С тобою написанным согласен, но сказать, что мой код некорректен не могу, т.к. он решает проблему, но не устраняет глупостей уже написанного кода.

Upd. я бы сделал примерно так, не тестил.
jQuery('body').on('click','.quo span',function(){
	var	$t=jQuery(this),
		$con=$t.parents('.quo').find('.form-control');
		col=$con.val();
		id=$con.attr('data-id');
	
	if($t.hasClass('up'))
		col++;
	else
		col--;
	
	$con.val(col);
	var form_control=$con.get(0);
	if(!!form_control.__timer)
		clearTimeout(form_control.__timer);
	
	form_control.__timer=setTimeout(function(){
		form_control.__timer=false;
		
		jQuery.ajax({
			url:'/wp-admin/admin-ajax.php',
			type:'POST',
			cache:false,
			data:({
				action:'change_product',
				col:col,
				id:id,
			}),
			success:function(data){
				jQuery('.order-form').html(data);
			}
		});
	},250);
});

Последний раз редактировалось Nexus, 29.08.2017 в 10:03.
Ответить с цитированием
  #9 (permalink)  
Старый 29.08.2017, 18:26
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

На счет "глупостей написанного", не могу согласиться, ведь, вы не до конца понимаете логику работы. Уже написанный код. И, да при каждом изменении, запрос на сервер. Это ведь корзинка заказа.

Последний раз редактировалось Янковиц, 29.08.2017 в 18:29.
Ответить с цитированием
  #10 (permalink)  
Старый 29.08.2017, 18:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Янковиц
при каждом изменении, запрос на сервер. Это ведь корзинка заказа
Совсем не обязательно каждое изменение сопровождать запросом. Но это ладно, а ведь у вас поле ввода, то есть не обязательно щелкать минус плюс, может быть удобнее клавиши и указать быстро, тогда как?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание значения текущего выбранного элемента списка в переменную apomin Элементы интерфейса 1 15.10.2015 19:47
Событие при выборе элемента из выпадающего списка в input type="email" Алексей Горохов Events/DOM/Window 4 27.12.2013 10:38
при выборе элемента из списка появляется еще один список maratmm Элементы интерфейса 0 07.08.2012 17:06
Выбор элемента из выпадающего списка Naik jQuery 0 21.07.2011 13:49
раскрывать/скрывать <td> при выборе определенного элемента списка zip Элементы интерфейса 2 19.01.2009 13:58