190

イベントがjQueryに存在するかどうかを確認する方法はありますか? カスタム名前空間イベントを使用するプラグインに取り組んでおり、イベントが要素にバインドされているかどうかを確認できるようにしたいと考えています。

4

8 に答える 8

144
$('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' などのすべてのイベントが取り込まれたオブジェクトが返されます。そのオブジェクトをループして、イベント ハンドラーの動作を確認できます。

于 2009-10-03T22:56:26.667 に答える
94

以下を使用できます。

$("#foo").unbind('click');

すべてのクリックイベントがバインドされていないことを確認してから、イベントを添付してください

于 2011-05-04T14:40:09.760 に答える
52

要素のイベントを確認するには:

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])
于 2012-10-15T15:46:00.727 に答える
28

jqueryイベントフィルターを使用

このように使用できます

$("a:Event(click)")
于 2010-08-22T12:45:33.443 に答える
5

以下のコードは、指定されたセレクターのすべてのクリック イベントを提供します。

jQuery(selector).data('events').click

each または for ex を使用して反復処理できます。次のような検証のために長さを確認してください。

jQuery(selector).data('events').click.length

それは誰かを助けるだろうと思った。:)

于 2012-07-13T00:12:17.980 に答える
5

まさにそれを行うhasEventListenerというプラグインを作成しました。

お役に立てれば。

于 2011-03-01T13:25:44.253 に答える
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
    });
于 2015-08-14T12:54:27.403 に答える
-1

私はこれをやってしまった

typeof ($('#mySelector').data('events').click) == "object"
于 2013-02-14T14:00:14.960 に答える