JQueryにイベントが存在するかどうかを確認する方法はありますか?私は、カスタムの名前空間付きイベントを使用するプラグインに取り組んでおり、イベントが要素にバインドされているかどうかを確認できるようにしたいと考えています。
$('body').click(function(){ alert('test' )})
var foo = $.data( $('body').get(0), 'events' ).click
// you can query $.data( object, 'events' ) and get an object back, then see what events are attached to it.
$.each( foo, function(i,o) {
alert(i) // guid of the event
alert(o) // the function definition of the event handler
});
オブジェクト参照(ただしjQueryオブジェクトではなく)を$ .dataにフィードすることで検査できます。2番目の引数には「events」をフィードし、「click」などのすべてのイベントが入力されたオブジェクトを返します。そのオブジェクトをループして、イベントハンドラーの動作を確認できます。
次を使用できます。
$("#foo").unbind('click');
すべてのクリックイベントがバインド解除されていることを確認してから、イベントを添付します
要素のイベントを確認するには:
var events = $._data(element, "events")
これは、直接イベントハンドラでのみ機能することに注意してください。$(document).on( "event-name"、 "jq-selector"、function(){// logic})を使用している場合、この回答の下部にあるgetEvents関数
例:
var events = $._data(document.getElementById("myElemId"), "events")
または
var events = $._data($("#myElemId")[0], "events")
完全な例:
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
<script>
$(function() {
$("#textDiv").click(function() {
//Event Handling
});
var events = $._data(document.getElementById('textDiv'), "events");
var hasEvents = (events != null);
});
</script>
</head>
<body>
<div id="textDiv">Text</div>
</body>
</html>
チェックするためのより完全な方法。これには$(document).onでインストールされる動的リスナーが含まれます
function getEvents(element) {
var elemEvents = $._data(element, "events");
var allDocEvnts = $._data(document, "events");
for(var evntType in allDocEvnts) {
if(allDocEvnts.hasOwnProperty(evntType)) {
var evts = allDocEvnts[evntType];
for(var i = 0; i < evts.length; i++) {
if($(element).is(evts[i].selector)) {
if(elemEvents == null) {
elemEvents = {};
}
if(!elemEvents.hasOwnProperty(evntType)) {
elemEvents[evntType] = [];
}
elemEvents[evntType].Push(evts[i]);
}
}
}
}
return elemEvents;
}
使用例:
getEvents($('#myElemId')[0])
jqueryイベントフィルタを使用します
このように使用できます
$("a:Event(click)")
hasEventListenerというプラグインを作成しました。
お役に立てれば。
以下のコードは、指定されたセレクターのすべてのクリックイベントを提供します。
jQuery(selector).data('events').click
それぞれまたはexを使用して繰り返し処理できます。次のような検証の長さを確認します。
jQuery(selector).data('events').click.length
それは誰かを助けるだろうと思った。 :)
私はここで同様の質問に答えました: hasHandlers()helper
JQuery> = v1.11.0で作業する
私にとってこの作品は、オブジェクトと発生したイベントのタイプを示しています。
var foo = $._data( $('body').get(0), 'events' );
$.each( foo, function(i,o) {
console.log(i); // guide of the event
console.log(o); // the function definition of the event handler
});