Есть ли способ проверить, существует ли событие в 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, а для второго аргумента подачи «событий», и что будет возвращать объект, заполненный все события, такие как " нажмите». Вы можете пропустить этот объект и посмотреть, что делает обработчик событий.
Мне действительно понравился ваш первый пример, события $ .data (elem, ' ') предоставляет гораздо больше информации. –
Я добавил, что в качестве комментария –
Почему бы вам просто не использовать $ ('body'). Data ('events')? – James
использование JQuery фильтр событий
вы можете использовать его как этот
$("a:Event(click)")
Ха, спасибо, построил этот плагин после ответа медикера несколько месяцев назад. –
Начиная с версии 1.8, этот плагин больше не работает –
Мне это нравится, отправляя плагин OP, созданный как ответ на его вопрос :) – Andy
Я написал плагин под названием hasEventListener который точно делает это.
Надеюсь, это поможет.
Проблема в том, как это работает? Я был на нем несколько часов, и он до сих пор не ясен. Я просто хочу проверить, есть ли на нем событие клика, и получить логический ответ, а не объект, но большинство тех методов, которые вы предоставляете, по крайней мере на примерах, намного сложнее. Интересно: http://www.codingjack.com/playground/jquick/#haseventlistener, но я не использую jquick, но мне нравится эта чистая простота. –
Вы можете использовать:
$("#foo").unbind('click');
, чтобы убедиться, что все события кликов являются unbinded, а затем прикрепить ваше событие
Не помогает, если вы использовали live для регистрации мероприятия. http://stackoverflow.com/questions/12755646/jquery-datatables-multiple-calls-to-event-handler-with-live-function –
Вопрос в том, чтобы проверить, существует ли событие в элементе, а не как развязать существующие события ... – Avi
@Avi, это по-прежнему хороший ответ, потому что во многих случаях вопрос задается с учетом этой проблемы: «Как не регистрировать обработчик дважды?» – hans
Ниже код предоставит вам все замковое событий на данном селекторе:
jQuery(selector).data('events').click
Вы можете перебирать его, используя каждый или напр. проверьте длину для проверки следующим образом:
jQuery(selector).data('events').click.length
Думал, что это поможет кому-то. :)
Не работает в jQuery> = 1.8. См. Ответ Тома Геркена для рабочего решения. – jbandi
Вот как проверить, существует ли какое-либо событие для элемента
<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>
Я думаю, вы можете упростить это, используя: var eventBound = (events! = Null); –
Это решение работает с jQuery 1.8.0 позже. Большое спасибо Тон Геркен :) –
я в конечном итоге делает это
typeof ($('#mySelector').data('events').click) == "object"
Я ответил на подобный вопрос здесь: 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
});
- 1. ngIf проверить, существует ли класс на элементе
- 2. проверить, существует ли строка в элементе массива
- 3. Проверить, существует ли событие в календаре
- 4. Возможно ли найти делегированное событие на элементе?
- 5. Нажмите событие на элементе
- 6. jQuery Как проверить, существует ли число в элементе?
- 7. JS Есть ли способ проверить, существует ли событие?
- 8. Kendo Ui - Проверьте, существует ли событие
- 9. Как проверить событие Слушатели на элементе в IE9
- 10. Проверить, существует ли событие с использованием графика api facebook
- 11. Проверить, существует ли таблица
- 12. проверить, существует ли продукт
- 13. проверить, существует ли имя пользователя
- 14. Поднять событие mousemove на элементе
- 15. удалить событие касания на элементе
- 16. проверить, существует ли значение
- 17. проверить, существует ли пароль_hash
- 18. проверить, существует ли класс
- 19. Проверить, существует ли файл
- 20. проверить, существует ли таблица
- 21. Проверить, существует ли атрибут
- 22. Проверить, существует ли опция
- 23. проверить, существует ли URI?
- 24. python проверить, существует ли цвет на мыши
- 25. PHP: проверить, существует ли файл на сервере
- 26. Как проверить, существует ли каталог на PHP?
- 27. проверить, существует ли файл php на сервере
- 28. Как проверить, существует ли функция на window.external
- 29. Проверить, существует ли функция на странице
- 30. as3 проверить, существует ли ссылка на youtube
так, в 1.8, все это неправильно? –
@SkylarSaveland Method '$ .data (element," events ")' никогда не был официальным. Но в jQuery 1.8.0 этот метод остался слева через '. ._ data (element,« events »)'. Подробнее [здесь] (http://blog.jquery.com/2012/08/09/jquery-1-8-released/) – Anton