我有一个自定义事件处理程序通过.delegate绑定到我的DOM中的元素。
此事件称为update.cui
,并触发AJAX元素的“更新”(即,从服务器刷新数据)。
我使用$("#my_element").trigger('update.cui');
我有两个地方使用完全相同的触发器代码来触发事件。在其中一个地方,trigger
调用有效,但在另一个地方,事件处理程序不会被触发。
如果我在Chrome Javascript控制台或Firebug中运行.trigger('update.cui')
,则会发生同样的事情 - 事件处理程序无法运行,即使它在我运行完全相同的.trigger('update.cui')
时运行在我的代码的一个位置。
奇怪的是,我可以在同一个DOM元素上将另一个处理程序委托给update.cui
,如果我在控制台中手动触发它,它将被触发。
我已经验证了在任何地方都使用了相同的元素(通过硬编码选择器并在控制台中运行选择器并且只看到一个元素返回),所以看起来似乎有两个事件处理程序被绑定非常令人困惑对同一元素的同一事件。
编辑:好的,这里有一些代码......很难展示,因为它有很多,但这里有重要的部分:
委托活动(我在这里使用了一个基于body和ID的选择器,以确保我得到了正确的元素,在“final”版本中,这个选择器不会基于ID):
$("body").delegate("#cc_list", "update.cui", function(e) {
console.log("I made it in here");
});
触发事件(这个有效):
var target = modules.find('form').attr('success-update-target');
if(target && $(target)){
console.log("A");
console.log($("#cc_list"));
// next line would normally be $(target).trigger('update.cui');
// but i'm doing it by ID for now for testing
$("#cc_list").trigger('update.cui');
}
触发事件2(此事件不起作用):
$.ajax({
'cache': false,
'url': "/cui_methods/ajax/model/CreditCard_Model/default",
'data': {
'idParam': el.closest('tr').attr('id').replace('cui_datatables_tr_', ''),
},
'success': function(data){
console.log("success");
console.log($("#cc_list"));
$("#cc_list").trigger('update.cui');
}
});