Есть ли способ проверить, существует ли событие в 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');
чтобы убедиться, что все события кликов не привязаны, а затем присоедините свое событие
Ответ 3
использовать фильтр событий jquery
вы можете использовать его так:
$("a:Event(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
Думал, что это поможет кому-то.:)
Ответ 7
Я ответил на аналогичный вопрос: hasHandlers() помощник
Работа с jQuery >= v1.11.0
Ответ 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"