如何在使用JQuery触发事件时控制错误处理?
我们发现如果在处理函数中抛出错误,它会阻止调用其他处理程序。
请参阅此fiddle。
问题复制如下:
$(document).on('customEvent', function()
{
thisIsUndefined.yetIDereferencedIt;
});
$(document).on('customEvent', function()
{
// Something useful happens here.
alert('something');
});
$(document).trigger('customEvent');
在上面的示例中,我希望显示警报。因为我不能保证我可以完全控制所有事件处理程序,所以我想要一种挂钩触发器并处理每个事件监听器错误的方法。
当然,欢迎替代设计方案。
答案 0 :(得分:1)
如果某个库已经定义了事件,并且您根本无法控制该事件,那么在取消绑定该事件之后,我会重新触发该事件,如下所示。
http://jsbin.com/uvivat/2/edit
$("a").on("click", function() {
Undefined.badFunc
});
var prevClickEvent = $._data($("a")[0], "events")["click"][0]["handler"];
//console.log(prevClickEvent);
$("a").unbind("click").on("click", function() {
try {
prevClickEvent.apply(this);
} catch(e) {
console.log(e);
}
alert("hi");
return false;
})
-----编辑----
完成注册的所有功能,
var prevClickEvents = $.extend({},$._data( $("a")[0], "events")["click"]);
$("a").unbind("click").on("click", function() {
var keys = Object.keys(prevClickEvents);
for (var i=0; i< keys.length; i++) {
try {
prevClickEvents[keys[i]]["handler"].call(this);
} catch(e) {
console.log(e);
}
}
});