Подтвердить что ты не робот

JQuery - добавление события изменения в раскрывающийся список

У базового HTML для моего раскрывающегося списка есть шанс измениться, и я пытался его настроить, используя опцию .live, а не опцию .change. это не работает для меня.

В настоящее время у меня есть:

$("#ItemsPerPage").change(function(e) { return updatePaging(); });

К сожалению, если я обновляю этот элемент управления через $.ajax, он теряет определение события. То, что я пробовал и не работает, это:

$("#ItemsPerPage").live("change", function(e) { return updatePaging(); });

Любые мысли?

4b9b3361

Ответ 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, который переназначает определение события?