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

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

Ответ 1

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

Ответ 2

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

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

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

Ответ 4

Здесь, как проверить, существует ли какое-либо событие для элемента

<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>

Ответ 5

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

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

Ответ 6

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

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

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

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

Думал, что это поможет кому-то.:)

Ответ 8

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

    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
    });

Ответ 9

В итоге я сделал это

typeof ($('#mySelector').data('events').click) == "object"