Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как определить есть ли click() у элемента? (https://javascript.ru/forum/jquery/21129-kak-opredelit-est-li-click-u-ehlementa.html)

gizmomy 30.08.2011 08:07

Как определить есть ли click() у элемента?
 
Собственно весь вопрос в заголовке.
Немного дополню: typeof $el.click всегда function, typeof $el.click() всегда object, typeof $el.onclick всегда undefined.

Льюк 30.08.2011 09:51

$el это что?
ps: у DOM элементов вроде бы у всех есть click

walik 30.08.2011 10:04

Если юзать 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') - Возвращает все обработчики событий для данного элемента. Соответственно в цикле тебе надо проходить по всем и проверять есть ли у элемента обработчик клика

gizmomy 30.08.2011 10:27

$el — это jQuery объект $('#show_panno')

gizmomy 30.08.2011 12:24

walik,

спасибо, но слишком сложно для такой ерунды. Я думал, может в jQuery есть аналог простого if (typeof element.onclick == 'function') element.onclick = null

melky 30.08.2011 13:09

Цитата:

Сообщение от gizmomy (Сообщение 123445)
walik,

спасибо, но слишком сложно для такой ерунды. Я думал, может в jQuery есть аналог простого if (typeof element.onclick == 'function') element.onclick = null

смотря как установлен обработчик

$('#myimage').click(function() { return false; }); 
// снимается так
$('#myimage').unbind('click');

walik 30.08.2011 13:10

А что тут сложного ?
Вот элементарный плагин за минуту сделанный для удобства если надо:
<!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 выше показал.

gizmomy 30.08.2011 15:46

walik,

спасибо ещё раз. У меня было сделано так, что клик к элементу добавлялся динамически при определенном действии, действие это могло повторяться несколько раз, при этом хотелось добавлять клик только первый раз. Так как достаточно простого определения наличия клика в jQuery не нашлось, я пересмотрел код и изменил так, чтобы клик биндился только раз.

Всем ещё раз спасибо за помощь, тему можно закрывать.

serhey.shmyg 23.12.2012 21:44

console.log('onpopstate' in window);

DevDiamond 24.10.2016 19:31

$('#show_panno').click(function( event )
{
	if ( event.target.tagName !== 'LABEL' && event.target.tagName !== 'INPUT' )
		$(this).children('ul').stop().slideToggle(200);
});


Примерно так :)


Часовой пояс GMT +3, время: 19:36.