it-swarm.com.ru

Проверьте, существует ли событие в элементе

Есть ли способ проверить, существует ли событие в jQuery? Я работаю над плагином, который использует настраиваемые события пространства имен, и хотел бы иметь возможность проверить, привязано ли событие к элементу или нет.

172
Corey Hart
$('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, и для второго аргумента feed 'events', который вернет объект, заполненный всеми событиями, такими как 'click'. Вы можете просмотреть этот объект и посмотреть, что делает обработчик событий.

141
meder omuraliev

Вы можете использовать:

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

чтобы убедиться, что все события кликов не связаны, затем прикрепите ваше событие

74
Toni

Для проверки событий на элементе:

var events = $._data(element, "events")

Обратите внимание, что это будет работать только с прямыми обработчиками событий, если вы используете $ (document) .on ("имя-события", "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])
36
Tom G

использовать фильтр событий jquery

вы можете использовать это так

$("a:Event(click)")
25
Fareed Alnamrouti

Я написал плагин под названием hasEventListener, который именно это и делает.

Надеюсь это поможет.

5
Sebastien P.

Ниже код предоставит вам все события нажатия на данный селектор:

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

Вы можете перебрать его, используя каждый или например. проверьте длину для проверки как:

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

Думала, это кому-нибудь поможет. :)

3
rohtakdev

Я ответил на аналогичный вопрос здесь: hasHandlers () helper

Работа с jQuery> = v1.11.0

1
Nadir

Эта работа для меня это показ объектов и тип события, которое произошло.

    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
    });
0
Jagtar Singh