使用jquery触发器处理自定义事件中的错误

时间:2013-02-11 02:18:44

标签: javascript jquery

如何在使用JQuery触发事件时控制错误处理?

我们发现如果在处理函数中抛出错误,它会阻止调用其他处理程序。

请参阅此fiddle

问题复制如下:

$(document).on('customEvent', function()
{
  thisIsUndefined.yetIDereferencedIt;
});

$(document).on('customEvent', function()
{
  // Something useful happens here.
  alert('something');
});

$(document).trigger('customEvent');

在上面的示例中,我希望显示警报。因为我不能保证我可以完全控制所有事件处理程序,所以我想要一种挂钩触发器并处理每个事件监听器错误的方法。

当然,欢迎替代设计方案。

1 个答案:

答案 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);
    }
  }
});