0
4

6 回答 6

3
于 2012-10-03T20:09:08.713 回答
2

如果您只希望绑定元素触发处理程序,请将其放在处理程序的顶部。

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

现在,如果单击任何嵌套元素,代码将立即返回。(不要忘记为e处理程序定义参数。)

于 2012-10-03T20:09:42.337 回答
1
$("#parent *").on("click", function(e) {
    if ( e.target.nodeName.toLowerCase() == 'a' ) {
        e.stopPropagation();
    }

    ... your original code ...
});
于 2012-10-03T20:07:00.903 回答
0

您可以通过 target.nodeName 检查单击的元素

$("div").click(function(e){
    if(e.target.nodeName == "div" $(e.target).hashClass('validDiv')){
        // do stuff
    }
     else{
       return false;
   }
});
于 2012-10-03T20:07:08.467 回答
0

我首选的方法是将点击事件“劫持”成单独的单独函数。由于<a>链接将首先被触发,因此您可以让该链接在页面内设置一个布尔值,<div>onclick 检查并简单地让该链接在检测到之前的点击时返回 false。

var linkClicked = false;

function LinkClick(something)
{
    linkClicked = true;
    // Do something
}

function DivClicked(something)
{
    if (linkClicked)
    {
        linkClicked = false;
        return false;
    }

    // Do something else
}
于 2012-10-03T20:09:11.323 回答
0

这是一个小提琴:http: //jsfiddle.net/phillipkregg/65fNS/

这是非常基本的——因为我不知道你当前的代码是什么——但我没有看到 stopPropagation(); 有任何问题。

进行实验,如果您删除 ,e.stopPropagation()您会看到当您单击链接时,它首先触发该函数,然后是 div 的函数。

于 2012-10-03T20:25:54.467 回答