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

17

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

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

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

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

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

Любые мысли?

    
задан Keith Barrows 07.05.2009 в 21:54
источник

3 ответа

23

Вместо того, чтобы каждый раз пересортировать <select> , вам лучше просто заменить его содержимое (список <option> элементов).

Поэтому используйте это, как вы уже есть:

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

, но когда вы его обновляете, просто поменяйте его содержимое (где newSelectElement - это новый элемент <select> ):

function updateItemsPerPage( newSelectElement ) {
    $("#ItemsPerPage").empty().append( newSelectElement.childNodes );
}

Таким образом, привязка не требуется обновлять, поскольку сам узел не заменен.

    
ответ дан Jed Schmidt 07.05.2009 в 22:17
источник
3

Чтобы уточнить предложение самзинга, вам нужно сделать что-то вроде этого:

$(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();
    });
}
    
ответ дан KyleFarris 07.05.2009 в 22:38
источник
2

Событие изменения не поддерживается функцией live (). Как запустить функцию в конце каждого вызова AJAX, который переназначает определение события?

    
ответ дан samiz 07.05.2009 в 22:01
источник