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 に答える