назначение события click для div, но не для привязки внутри него - PullRequest
9 голосов
/ 14 октября 2010

Вопрос-вопрос.

У меня есть div, который содержит текст и тег привязки.

Я хочу назначить событие click тегу div и его содержимому, ИСКЛЮЧАЯ тег привязки.

Поэтому, когда я нажимаю на элемент div, появляется окно с предупреждением. Но если я нажму на якорь (то есть внутри div), предупреждение не должно появиться.

div будет выглядеть примерно так:

<div id="myDiv">
    This is the content of the div.
    <img src="blah.jpg" />
    <a href="somewhere.html">Click here</a>.
    Some more content.
</div>

Есть идеи? Я использую jquery, чтобы назначить событие click для div.

Ответы [ 2 ]

13 голосов
/ 14 октября 2010

Вы можете проверить цель клика, так как <a> не имеет дочерних элементов, например:

$("#myDiv").click(function(e) {
  if(e.target.nodeName == 'A') return;
  //click handler code
});
0 голосов
/ 31 августа 2016

В продолжение ответа Ника, вот что я в итоге использовал, поскольку он учитывает вложенные теги.

function handleClick(e) {
    var $current = $(e.target);

    // return if we don't want to override another click event
    // check current tag
    var tags = ['A', 'BUTTON', 'INPUT'];
    if (tags.indexOf(e.target.tagName) >= 0)
      return;
    // check parent tags
    var ignoreClick = false;
    $.each(tags, function(i, tag) {
      console.log('checking tag', tag);
      if ($current.parents(tag).length) {
        ignoreClick = true;
        return;
      }
    });
    if (ignoreClick)
      return;

    // do your normal click stuff here
}

JsFiddle

...