JQuery - добавление события изменения в раскрывающийся список
У базового HTML для моего раскрывающегося списка есть шанс измениться, и я пытался его настроить, используя опцию .live
, а не опцию .change
. это не работает для меня.
В настоящее время у меня есть:
$("#ItemsPerPage").change(function(e) { return updatePaging(); });
К сожалению, если я обновляю этот элемент управления через $.ajax
, он теряет определение события. То, что я пробовал и не работает, это:
$("#ItemsPerPage").live("change", function(e) { return updatePaging(); });
Любые мысли?
Ответы
Ответ 1
Вместо того, чтобы каждый раз привязывать <select>
, вам лучше просто заменить его содержимое (список элементов <option>
).
Поэтому используйте это, как вы уже есть:
$("#ItemsPerPage").change(function(e) { return updatePaging(); });
но когда вы его обновляете, просто поменяйте его содержимое (где newSelectElement
- новый элемент <select>
):
function updateItemsPerPage( newSelectElement ) {
$("#ItemsPerPage").empty().append( newSelectElement.childNodes );
}
Таким образом, привязка не требуется обновлять, поскольку сам node не заменяется.
Ответ 2
Чтобы уточнить предложение samiz, вам нужно будет сделать что-то вроде этого:
$(function() {
bind_items_per_page();
});
function bind_items_per_page() {
$("#ItemsPerPage").unbind('change').bind('change',function() {
updatePaging();
});
}
function updatePaging() {
$.post('/some/script',{foo:'bar',bar:'foo'},function(data) {
/* what ever you need to do */
// And assuming what ever you did above changed your select box...
bind_items_per_page();
});
}
Ответ 3
Событие изменения не поддерживается функцией live(). Как запустить функцию в конце каждого вызова AJAX, который переназначает определение события?