下拉列表的底层超文本标记语言可能会更改,我尝试使用.live
选项而不是.change
选项对其进行设置。它对我不起作用。
我目前拥有的是:
$("#ItemsPerPage").change(function(e) { return updatePaging(); });
不幸的是,如果我通过$.ajax
更新这个控件,它会丢失事件定义。我尝试过的,但没有奏效的是:
$("#ItemsPerPage").live("change", function(e) { return updatePaging(); });
有什么想法吗?
发布于 2009-05-07 20:17:15
与其每次都重新绑定<select>
,不如交换它的内容( <option>
元素列表)。
所以,就像你已经做的那样使用它:
$("#ItemsPerPage").change(function(e) { return updatePaging(); });
但当您更新它时,只需交换它的内容(其中newSelectElement
是新的<select>
元素):
function updateItemsPerPage( newSelectElement ) {
$("#ItemsPerPage").empty().append( newSelectElement.childNodes );
}
这样,绑定将不需要刷新,因为节点本身不会被交换。
发布于 2009-05-07 20:38:56
要详细说明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();
});
}
发布于 2009-05-07 20:01:15
live()不支持更改事件。在每个AJAX调用的末尾运行一个重新分配事件定义的函数如何?
https://stackoverflow.com/questions/836694
复制相似问题