2012-01-19 4 views
1

他の誰かが以前書き込んだHTML/jQueryページを使って作業しています。デバッグのために、私はすべての要素をページロードのためにトリガーされたすべての.blur()イベントを見つける必要があります。ページのスクリプトが.blur()を再バインドしかし、これは、(私はページがロードされる前に、それを実行できたとしても)動作しませんロード中の任意の要素に対して実行されたすべてのblur()イベントを見つける

$("*").each(function() { 
    $(this).blur(function() { 
     alert(this); 
    }); 
}); 

私はすべての要素にイベントをバインドするには、次のように使用することができますとにかくイベント。

ページの読み込み時にどのような.blur()イベントが実行されるかはわかりますか?実行時に.blur()の内部jQuery関数を上書きすることができると考えましたが、これはブラーイベントバインディングで上書きされることはありませんが、可能かどうかはわかりません。

+0

を私はまだいませんよあなたが何を求めているかを完全に確信しています。あなた自身の 'blur'イベントを全ての要素に付けたいのですか?(デバッグにどのように役立つのですか?) 'blur'イベントハンドラを持っているすべての要素のリストを添付しますか?または、ページの読み込みが完了した後に、どの要素に「blur」イベントハンドラがトリガされているかを知りたいですか? –

+0

@Anthony 3番目のオプションは私がする必要があるものです。 – Flash

+0

その場合、@ RobWの答えは**あなたが必要とするものを行うかもしれません。要素に対して複数回 '.blur()'(または '.click()'など)を呼び出すと、以前に追加されたハンドラは上書きされません。しかし、既存のjQueryコードが(何らかの理由で)$( 'selector')を実行した場合、unbind( 'blur')。blur(function(e){...});ジェネリックハンドラを接続する正しい場所。 –

答えて

2

バインド.on('blur', '*', ...)(jQueryのを1.7以上)を使用してdocumentからblurイベント:

$(document).on('blur', '*', function(e) { 
    e.stopPropagation(); // Otherwise, many alerts will pop up for each event 
    alert(this); 
}); 

あなたはjQueryの1.7以上が、代わりにdelegateを使用していない場合:

$(document).delegate('*', 'blur', function(e) { 
    e.stopPropagation(); // Otherwise, many alerts will pop up for each event 
    alert(this); 
}); 
関連する問題