2012-12-28 19 views
20

可能性の重複:
test if event handler is bound to an element in jQuery要素にクリックハンドラがあるかどうかを確認するにはどうすればいいですか?

は、次の操作を行うためにしようとしました(リンクを '' タグのjQueryオブジェクトです):

jqueryの-1.8.3を使用して
link.data("events") //undefined even if link has event handlers 
jQuery.data(link, 'events') //undefined always also 
jQuery._data(link, 'events') //undefined always also 

要素にクリックハンドラがあるかどうかを確認する方法はありますか?

+4

どのようにクリックハンドラを割り当てましたか? – AmShaegar

+1

あなたはリンクが正しく選択されていることを確信していますか? – NimChimpsky

+0

ハンドラはlink.click(... some function ...)で複数回割り当てられています。そしてハンドラーが何回も実行されるように。 – kostepanych

答えて

34

jQuery._dataを使用してイベントを確認できます。最初の引数は、jQueryオブジェクトではなく、HTML要素への参照でなければなりません。

var ev = $._data(element, 'events'); 
if(ev && ev.click) alert('click bound'); 

以下のサンプル。

$(function(){ 
 
    $('#test').click(function(){ 
 
     // NOTE: this below is refering to the HTML element, NOT the jQuery element 
 
     var ev = $._data(this, 'events'); 
 
     if(ev && ev.click) alert('click bound to this button'); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<button id="test">Click me to check for click handlers</button>

はまた、イベントがjQueryを介して結合されたときのイベントをチェックするため、この方法はのみ動作することに注意してください。イベントがelement.attachEventListenerelement.onclick<a onclick="doStuff()">またはその他のjQuery以外の方法でバインドされている場合、これは機能しません。このボートにフィッティングする場合は、this answerをチェックしてください。

+0

@Blossoming_Flowerあなたは精巧にできますか?これはjQueryバージョン2.1.3と1.11.0で動作します。 – Snuffleupagus

+0

私の謝罪は、私のところでは誤りでした。私は私のコメントを削除しました。 –

+0

@ Ionian316 'undefined == false'だから' if(ev && ev.click) 'も同じことをします。 – Snuffleupagus

関連する問題