Как проверить, где пользователь нажал в DIV? - PullRequest
0 голосов
/ 04 октября 2011

Я думаю о ситуации, как узнать, где пользователь нажал на DIV.

<div class="abc">
  <a href="#" class="def">xxx</a>
</div>

$("div.abc").live('click', function(e) {
  alert('message');
})

Если я буду использовать эту часть кода, поэтому, если я нажму где-нибудь в DIV.ABC , поэтому я получу предупреждение message .Это нормально.Но это сообщение мне нужно только в тот момент, когда пользователь щелкнет по месту в DIV.ABC , НЕ НА ЭЛЕМЕНТЕ, который находится в DIV.ABC .Можно ли это сделать?

Заранее спасибо;)

РЕДАКТИРОВАТЬ: Извините, ребята, я извиняюсь перед вами.Конечно, везде в моем сценарии буквы ниже.Моя проблема в том, как игнорировать alert ('message') , когда я нажму на якорь в div.abc

Ответы [ 6 ]

3 голосов
/ 04 октября 2011

e.target.tagName.toLowerCase() даст вам тип элемента, который был исходным источником события. В вашем случае вы можете проверить, что он дает вам div вместо a.

1 голос
/ 04 октября 2011

Попробуйте -

$("div.abc").live('click', function(e) {
  if (e.target.nodeName.toLowerCase() != 'a')  
  alert('message');
})

Демо - http://jsfiddle.net/ipr101/RJHDy/

0 голосов
/ 04 октября 2011

Использование .stopPropagation().

$('div.abc').click('live', function() {
    // this does what you want
    alert('message');
});

$('div.abc *').click('live', function(e) {
    // but we don't want that to happen
    // when we click on anything else inside
    e.stopPropagation();
});
0 голосов
/ 04 октября 2011

Вам не нужен метод live в вашем примере, так что можете просто сделать что-то подобное ниже.

$("div.abc").click(function(e) { alert('message'); } ).children().click(function(e) {
   e.preventDefault();
   e.stopPropogation();
   alert('message');
});

e.stopPropogation остановит любые события, которые будут подниматься вверх по дереву.

0 голосов
/ 04 октября 2011

Я думаю, что когда вы ссылаетесь на jquery, выбирающий ваш div abc, он каким-то образом фокусируется на теге привязки из-за раздела «a». Попробуйте переименовать ваш div и отразить его в jquery. Посмотрите, поможет ли это.

0 голосов
/ 04 октября 2011

Метод stopPropogation() предотвращает всплывание событий по дереву. Но будьте осторожны, он также останавливает выполнение других обработчиков событий, связанных с этими элементами, если они должны выполняться после этого.

$("div.abc").live('click', function(e) {
  alert('message');
})
$("div.abc>*").live('click', function (e) {
  e.stopPropogation();
});
...