我的下拉列表的基础HTML有可能发生变化,我尝试使用.live
选项而不是.change
选项进行设置。它对我不起作用。
我目前拥有的是:
$("#ItemsPerPage").change(function(e) { return updatePaging(); });
不幸的是,如果我通过$.ajax
更新此控件,则会丢失事件定义。我尝试过但不起作用的是:
$("#ItemsPerPage").live("change", function(e) { return updatePaging(); });
有什么想法吗?
答案 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调用结束时运行函数?