2013-08-26 3 views
0

Мне нужно запустить событие, когда пользователь нажимает на элемент или что-то внутри него. ЗА ИСКЛЮЧЕНИЕМ, если он нажимает на элемент <a>.JQuery .click() selector ignore <a> дочерние элементы?

Это то, что я пытаюсь в настоящее время:

$("div:not(a)").click(function(e) { 
    alert("hello world"); 
}); 

Вы можете лучше понять его здесь:

http://jsfiddle.net/cMBP3/1/

Как я могу это сделать?

+2

Возможный дубликат [Предотвращение выполнения родительского обработчика событий] (http://stackoverflow.com/questions/1398582/prevent-execution-of-parent-event-handler) –

+2

FYI, селектор 'div: not (a)' не имеет большого смысла. Это означает * "выбрать каждый элемент с именем тега' div', который не имеет имени тега 'a' *. Так как элемент не может иметь два имени тега, 'div: not (a)' равнозначно 'div'. –

+0

Возможный дубликат [тип элемента элемента проверки щелкнул] (http://stackoverflow.com/questions/17797038/check-element-type-clicked) –

ответ

2

Поскольку ваш div никогда не является a, это не будет работать.

Вы должны проверить свой целевой элемент для a тега, например так:

$('div').click(function(event) { 
    var $target = $(event.target); 
    if(!$target.is("a")) { 
     alert("hello world"); 
    } 
}); 

Я обновил свою скрипку: Have a look

+2

Это выглядит странно знакомым :) Возможно, вы захотите обновить аргумент «e» до « событие ", чтобы отразить объект, который вы используете в своей функции. –

+0

Спасибо, не заметили этого. :-) –

2

Вы могли бы использовать:

$("div").click(function (e) { 
    if (e.target.nodeName.toLowerCase() != 'a') alert("hello world"); 
}); 

jsFiddle example

1

Это проверялось, но, надеюсь, дает вам идею:

$(function(){ 
    $('div').click(function(e){ 
     if($(e.target).is('a')){ 
       e.stopPropagation(); 
     } 
    }); 
}); 
Смежные вопросы