Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не выполняется функция, если ранее выполнена другая (https://javascript.ru/forum/events/32709-ne-vypolnyaetsya-funkciya-esli-ranee-vypolnena-drugaya.html)

zevilz 26.10.2012 17:56

Не выполняется функция, если ранее выполнена другая
 
Имеется динамические select'ы (#p_cat select#p_subcat select,#p_material select)
После загрузки страницы все 3 select'а видны и выбрано необходимое значение. При изменении первого селекта новое значение отправляется обработчику, и на основании этого значения из базы достаются новые значения для 2го селекта, очищаются элементы со 2м и 3м селектом, а затем вставляется новый 2й. При изменении 2го селекта, первый не трогается, удаляется 3й и заменяется на новый. Вот скрипт:
$(document).ready(function(){
	$("#p_cat select").change(function(){
		$.ajax({
			url: "/admin/dyn_select.php?cat="+$("#p_cat select").val()+"&id="+$("#id").val(),
			cache: false,
			success: function(html){
				$('#p_subcat').empty();
				$('#p_material').empty();
				$("#p_subcat").html(html);
			}
		});
	});
	$("#p_subcat select").change(function(){
		$.ajax({
			url: "/admin/dyn_select.php?subcat="+$("#p_subcat select").val()+"&id="+$("#id").val(),
			cache: false,
			success: function(html){
				$('#p_material').empty();
				$("#p_material").html(html);
			}
		});
	});
});

Но напоролся на проблему: если изменить сначала 1й селект, а затем 2й, то функция $("#p_subcat select").change(function(){} не выполняется, если в обратном порядке, то все работает. Что не так сделал? Заранее спасибо за ответы

PS: поменял функции местами - не выполняется все та же функция $("#p_subcat select").change(function(){}. Почему-то скрипт не работает на сгенерированный функцией $("#p_cat select").change(function(){} селект

a_l 26.10.2012 21:07

http://api.jquery.com/empty/
Цитата:

To avoid memory leaks, jQuery removes other constructs such as data and event handlers from the child elements before removing the elements themselves.

If you want to remove elements without destroying their data or event handlers (so they can be re-added later), use .detach() instead.

zevilz 27.10.2012 09:03

Спасибо, разобрался)
$(document).ready(function(){
	$("#p_subcat select").change(function(){
		$.ajax({
			url: "/admin/dyn_select.php?subcat="+$("#p_subcat select").val()+"&id="+$("#id").val(),
			cache: false,
			success: function(html){
				$('#p_material option').detach();
				$("#p_material select").html(html);
			}
		});
	});
	$("#p_cat select").change(function(){
		$.ajax({
			url: "/admin/dyn_select.php?cat="+$("#p_cat select").val()+"&id="+$("#id").val(),
			cache: false,
			success: function(html){
				$('#p_subcat option').detach();
				$('#p_material option').detach();
				$("#p_subcat select").html(html);
			}
		});
	});

});

Сейчас все работает


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