JQuery - добавление события изменения в выпадающий список - PullRequest
17 голосов
/ 07 мая 2009

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

Что у меня сейчас есть:

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

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

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

Есть мысли?

Ответы [ 3 ]

23 голосов
/ 08 мая 2009

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

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

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

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

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

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

3 голосов
/ 08 мая 2009

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

$(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();
    });
}
2 голосов
/ 08 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...