Как определить есть ли 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, время: 08:33. |