如果单击某个孩子,如何防止点击功能?

时间:2013-04-18 17:59:42

标签: jquery

Fiddle

出于某种原因,not()功能中的on()无效。我只希望在单击aqua section(parent)元素时运行该函数,如果单击灰色div(子)元素则不执行任何操作。

jQuery的:

$('body').append('<section><div class="someClass"></div><section>');

$('body').on('click', 'section:not(".someClass")', function(){
    alert('Aqua not gray clicked.');
});

另外,如果点击section aqua元素,为什么会弹出两次警告?

2 个答案:

答案 0 :(得分:1)

对于后代选择器,section和:not之间会有空格,并且你可能需要没有,因为预期的元素是section的后代。对于空格,它将看起来没有类someclass的部分。

$('body').on('click', 'section :not(:has(.someClass))', function(){
    alert('Aqua not gray clicked.');
});

您可以将事件绑定到section,并通过在处理程序中为具有类someclass的后代的部分传递代码的执行。

$('body').on('click', 'section', function(){
    if($(this).find('.someClass').length > 0) return;
    alert('Aqua not gray clicked.');
});

答案 1 :(得分:0)

您需要检查点击的实际元素(e.target)是否具有该类:

if ($(e.target).hasClass('someClass')) return;