JQuery - 将更改事件添加到下拉列表

时间:2009-05-07 19:54:45

标签: jquery

我的下拉列表的基础HTML有可能发生变化,我尝试使用.live选项而不是.change选项进行设置。它对我不起作用。

我目前拥有的是:

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

不幸的是,如果我通过$.ajax更新此控件,则会丢失事件定义。我尝试过但不起作用的是:

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

有什么想法吗?

3 个答案:

答案 0 :(得分:23)

而不是每次重新绑定<select>,而不是仅仅交换其内容(<option>元素列表)。

所以请按照原样使用:

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

但是当你更新它时,只需换掉它的内容(newSelectElement是新的<select>元素):

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

这样,不需要刷新绑定,因为节点本身没有交换。

答案 1 :(得分:3)

要详细说明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();
    });
}

答案 2 :(得分:2)

live()不支持更改事件。如何在每次重新分配事件定义的AJAX调用结束时运行函数?