Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Поочередность выполнения действий. (https://javascript.ru/forum/css-html/73351-poocherednost-vypolneniya-dejjstvijj.html)

Subteras 08.04.2018 22:05

Поочередность выполнения действий.
 
Всем привет.
Вот сделал такой вывод, но возникла проблема. Как сделать отработку Ajax запроса после каждой отработки вывода массива each ( id1 -> quntity1 -> Ajax, id2 -> quntity2 -> Ajax, .... и т.д.)?
window.onload = function(){
	$(document).ready(function(){
	$('.clear_basket').on('click', function(){
		var id = "";
		var quntity = "";
		$('.num_id').each(function(){
			id = $(this).val();
			quntity = $(this).closest('div.b_list').find('.b_quntity').val();
				$.ajax({
					url: "http://localhost/MyShop/php/product-basket-clear.php",
					type:"POST",
					data:{id:id, quntity:quntity},
					success: function(result){
						console.log(result);
				}
			});
				console.log(id);
				console.log(quntity);
			});	
			
		});	
	});
};

j0hnik 09.04.2018 00:39

window.onload = function(){
	$(document).ready(function(){
	$('.clear_basket').on('click', function(){
		var id = "";
		var quntity = "";
		var i = 0;
		var num = $('.num_id');
		(function func(){
			var id = num.eq(i).val();
			quntity = num.eq(i).closest('div.b_list').find('.b_quntity').val();
				$.ajax({
					url: "http://localhost/MyShop/php/product-basket-clear.php",
					type:"POST",
					data:{id:id, quntity:quntity},
					success: function(result){
						console.log(result);
						if(num.length>++i) func();
				}
			});
				console.log(id);
				console.log(quntity);
			})();
			
		});	
	});
};

Subteras 09.04.2018 00:58

Алгоритм отрабатывает правильно! Но перестал находить значение
quntity = $(this).closest('div.b_list').find('.b_quntity').val();
пишет "undefined".

j0hnik 09.04.2018 01:02

Subteras,
Исправил, проверьте

Subteras 09.04.2018 01:06

j0hnik,
Это просто отлично!!! Все работает, а я уж было подумал, что зашел в тупик!

Nexus 09.04.2018 10:42

Не обязательно оборачивать код в
$(document).ready(function(){});
Т.к. вы его запускаете после полной загрузки браузером страницы (load event), событие "DOMContentLoaded" в этот момент уже наступит.

Subteras 10.04.2018 01:28

Цитата:

Сообщение от Nexus (Сообщение 482764)
Не обязательно оборачивать код в
$(document).ready(function(){});
Т.к. вы его запускаете после полной загрузки браузером страницы (load event), событие "DOMContentLoaded" в этот момент уже наступит.

Я window.onload убрал из кода. Он мне там не нужен.

Вопрос еще возник. Как взаимодействовать с input-ом , созданным динамически?
Вот код
$('input').on('keyup', function(){
			var id = $(this).closest('div.b_list').find('.b_id').val();
			var quntity = $(this).closest('div.b_list').find('.b_quntity').val();
			var price = $(this).closest('div.b_list').find('.b_price').val();
			
			var new_price = quntity * price;
			console.log(new_price);
			console.log(id);
		});

Но он работает только с элементами которые есть на странице, а я динамически добавляю еще, и код перестает работать вообще, даже на предыдущих(на которых работал до этого.

Malleys 10.04.2018 01:53

возможно так

$(document).on("keyup", function(event) {
	var jquery = $(event.target).closest("div.b_list");
	if(jquery.length === 0) return;
	
	var id       = jquery.find('.b_id')     .val();
	var quantity = jquery.find('.b_quntity').val();
	var price    = jquery.find('.b_price')  .val();

	var newPrice = quantity * price;
	console.log(newPrice);
	console.log(id);
});

Subteras 10.04.2018 02:00

Да, то что нужно! Спасибо!!! Разберу сегодня этот пример))).
А не подскажите еще как мне newPrice записать в такой же динамически создаваемый input ".b_price". Что бы потом отравить эти данные в mysql. Смысл такой, что меняя количество должна меняться сумма в input. Со статическими у меня проблем нет, а в jQuery я только-только новичок.

Nexus 10.04.2018 07:43

Цитата:

Сообщение от Subteras
А не подскажите еще как мне newPrice записать в такой же динамически создаваемый input ".b_price".

У вас в строке 7 идет чтение значения из этого инпута, записать значение можно так:
jquery.find('.b_price').val(newPrice);

рони 10.04.2018 09:09

Subteras,
в каком ближайшем постоянном блоке находятся div.b_list?

Subteras 10.04.2018 19:02

Нет, я так пробовал. Не проходит этот код. Нужно чтобы по функции keyup работало (я меняю значение quntity, автоматом перезаписывается значение input). Но значение не меняется...

Subteras 10.04.2018 19:03

рони,
#option_basket извиняюсь, просто #basket

рони 10.04.2018 19:15

Subteras,
возможно так ...
$(function() {
$("#basket").on("input", "div.b_list", function(event) {
	var jquery = $(this);
	var id       = jquery.find('.b_id')     .val();
	var quantity = jquery.find('.b_quntity').val();
	var price    = jquery.find('.b_price')  .val();
	var newPrice = quantity * price||0;
	// ???
});
});

Цитата:

Сообщение от Subteras
А не подскажите еще как мне newPrice записать в такой же динамически создаваемый input ".b_price".

тут что-то с логикой не так!!!

Subteras 10.04.2018 20:39

Цитата:

Сообщение от рони (Сообщение 482933)
тут что-то с логикой не так!!!

Получилось, но пришлось добавить еще один input
$(document).on("keyup", function(event) {
	var jquery = $(event.target).closest("div.b_list");
	if(jquery.length === 0) {return;}
	
	var id       = jquery.find('.b_id')     .val();
	var quantity = jquery.find('.b_quntity').val();
	var price    = jquery.find('.b_price')  .val();

	var new_price = quantity * price;
	$(event.target).closest('div.b_list').find('.b_total').val(new_price);
	
	console.log(new_price);
});

рони 10.04.2018 20:58

Subteras,
а так?
$(function() {
$("#basket").on("input", "div.b_list", function(event) {
	var jquery = $(this);
	var id       = jquery.find('.b_id')     .val();
	var quantity = jquery.find('.b_quntity').val();
	var price    = jquery.find('.b_price')  .val();
	var newPrice = quantity * price||0;
	jquery.find('.b_total').val(new_price);});
});

Subteras 10.04.2018 21:04

Цитата:

Сообщение от рони
а так?

ReferenceError: Can't find variable: new_price

переменную в var я конечно поменял. Но дальше разбираться не стал. Пока по предыдущему коду все работает...


Часовой пояс GMT +3, время: 10:27.