Как определить есть ли click() у элемента?
Собственно весь вопрос в заголовке.
Немного дополню: typeof $el.click всегда function, typeof $el.click() всегда object, typeof $el.onclick всегда undefined. |
$el это что?
ps: у DOM элементов вроде бы у всех есть click |
Если юзать JQuery, то можно.
<!DOCTYPE HTML> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> </head> <body> <script> $(document.body).click(function() {alert('aa');}); var events = $(document.body).data('events'); if (events) { $.each(events, function(event, obj) { alert(event); // obj- Объект с инфой о событии и обработчике. }); } </script> </body> </html> $(element).data('events') - Возвращает все обработчики событий для данного элемента. Соответственно в цикле тебе надо проходить по всем и проверять есть ли у элемента обработчик клика |
$el — это jQuery объект $('#show_panno')
|
walik,
спасибо, но слишком сложно для такой ерунды. Я думал, может в jQuery есть аналог простого if (typeof element.onclick == 'function') element.onclick = null |
Цитата:
$('#myimage').click(function() { return false; }); // снимается так $('#myimage').unbind('click'); |
А что тут сложного ?
Вот элементарный плагин за минуту сделанный для удобства если надо: <!DOCTYPE HTML> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script src="my.js"></script> </head> <body> <script> // Начало плагина $.fn.hasEventListener = function(eventType) { if (!eventType) return false; var has = false; var events = $(this).data('events'); if (events) $.each(events, function(event) { if (event == eventType) has = true; }); return has; } // Конец плагина $(document.body).click(function() {alert('aa');}); if ($(document.body).hasEventListener('click')) alert('Has click'); if (!$(document.body).hasEventListener('mouseover')) alert("Hasn't mouseover"); </script> </body> </html> Ааа, ну как снимать обработчики, melky выше показал. |
walik,
спасибо ещё раз. У меня было сделано так, что клик к элементу добавлялся динамически при определенном действии, действие это могло повторяться несколько раз, при этом хотелось добавлять клик только первый раз. Так как достаточно простого определения наличия клика в jQuery не нашлось, я пересмотрел код и изменил так, чтобы клик биндился только раз. Всем ещё раз спасибо за помощь, тему можно закрывать. |
console.log('onpopstate' in window);
|
$('#show_panno').click(function( event ) { if ( event.target.tagName !== 'LABEL' && event.target.tagName !== 'INPUT' ) $(this).children('ul').stop().slideToggle(200); }); Примерно так :) |
Часовой пояс GMT +3, время: 19:36. |