我有一个DIV与一个分类的foobar,和一些DIV内的DIV是未分类的,但我认为他们继承了foobar类:

$('.foobar').on('click', function() { /*...do stuff...*/ });

我希望它只在点击DIV的某个地方时发射,而不是在它的子DIV上。


当前回答

// if its li get value document.getElementById('li').addEventListener("click", function(e) { if (e.target == this) { UodateNote(e.target.id); } }) function UodateNote(e) { let nt_id = document.createElement("div"); // append container to duc. document.body.appendChild(nt_id); nt_id.id = "hi"; // get conatiner value . nt_id.innerHTML = e; // body... console.log(e); } li{ cursor: pointer; font-weight: bold; font-size: 20px; position: relative; width: 380px; height: 80px; background-color: silver; justify-content: center; align-items: center; text-align: center; margin-top: 0.5cm; border: 2px solid purple; border-radius: 12%;} p{ cursor: text; font-size: 16px; font-weight: normal; display: block; max-width: 370px; max-height: 40px; overflow-x: hidden;} <li id="li"><p>hi</p></li>

其他回答

//bind `click` event handler to the `.foobar` element(s) to do work,
//then find the children of all the `.foobar` element(s)
//and bind a `click` event handler to them that stops the propagation of the event
$('.foobar').on('click', function () { ... }).children().on('click', function (event) {
    event.stopPropagation();
    //you can also use `return false;` which is the same as `event.preventDefault()` and `event.stopPropagation()` all in one (in a jQuery event handler)
});

这将停止点击事件在.foobar元素的任何子元素上的传播(冒泡),因此事件不会到达.foobar元素以触发它们的事件处理程序。

这里是一个演示:http://jsfiddle.net/bQQJP/

我没有得到工作的公认答案,但这似乎做的把戏,至少在香草JS。

if(e.target !== e.currentTarget) return;

你可以用冒泡来帮助自己:

$('.foobar').on('click', function(e) {
    // do your thing.
}).on('click', 'div', function(e) {
    // clicked on descendant div
    e.stopPropagation();
});

如果您不介意只针对较新的浏览器,还有另一种方法。只需要添加CSS

pointer-events: none;

到您想要捕获点击的div的任何子div。这是支持表

http://caniuse.com/#feat=pointer-events

如果e.target与这个元素相同,则没有单击后代。

$ (' .foobar ')。On ('click',函数(e) { If (e.target !== this) 返回; Alert('点击foobar'); }); .foobar { 填充:20 px;背景:黄色; } 跨度{ 背景:蓝色;颜色:白色;填充:8 px; } < script src = " https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js " > < /脚本> <div class='foobar'> .foobar (alert) <span>child (no alert)</span> < / div >