0

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

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

请看这个小提琴

问题复制如下:

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

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

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

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

当然,欢迎替代设计选项。

4

1 回答 1

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);
    }
  }
});
于 2013-02-11T03:25:56.880 回答