Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将单击绑定到jquery中的div而不带子项<;a>';s_Javascript_Jquery_Html - Fatal编程技术网

Javascript 将单击绑定到jquery中的div而不带子项<;a>';s

Javascript 将单击绑定到jquery中的div而不带子项<;a>';s,javascript,jquery,html,Javascript,Jquery,Html,我有一个div,其中包含一些其他div和一些 我正在将一个click处理程序绑定到此父div,但是如果单击该div中的,它也会触发该处理程序。我尝试将另一个单击处理程序绑定到这些,并使用事件.stopPropagation(),但这似乎不起作用 有什么想法吗?您可以通过target.nodeName检查单击的元素 $("#parent *").on("click", function(e) { if ( e.target.nodeName.toLowerCase() == 'a' ) {

我有一个div,其中包含一些其他div和一些

我正在将一个click处理程序绑定到此父div,但是如果单击该div中的
,它也会触发该处理程序。我尝试将另一个单击处理程序绑定到这些
,并使用
事件.stopPropagation()
,但这似乎不起作用


有什么想法吗?

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

$("#parent *").on("click", function(e) {
    if ( e.target.nodeName.toLowerCase() == 'a' ) {
        e.stopPropagation();
    }

    ... your original code ...
});
$("div").click(function(e){
    if(e.target.nodeName == "div" $(e.target).hashClass('validDiv')){
        // do stuff
    }
     else{
       return false;
   }
});

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

$("div").click(function(e){
    if(e.target.nodeName == "div" $(e.target).hashClass('validDiv')){
        // do stuff
    }
     else{
       return false;
   }
});

你可以这样做。

$('div, a').click(function(e) {
    if($(this).is('a')) return false;
    console.log('click');
});

你可以做这样的事情。

$('div, a').click(function(e) {
    if($(this).is('a')) return false;
    console.log('click');
});

我首选的方法是将点击事件“劫持”到单独的函数中。由于将首先触发
链接,因此您可以让该链接在
onclick检查的页面中设置一个布尔值,如果它检测到以前的单击,只需让该链接返回false即可

var linkClicked = false;

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

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

    // Do something else
}
我首选的方法是将点击事件“劫持”到单独的函数中。由于将首先触发
链接,因此您可以让该链接在
onclick检查的页面中设置一个布尔值,如果它检测到以前的单击,只需让该链接返回false即可

var linkClicked = false;

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

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

    // Do something else
}

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

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

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

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

if (this !== e.target)
    return;
现在,如果单击任何嵌套元素,代码将立即返回。(别忘了为处理程序定义
e
参数。)

这里有一个小问题:

这是非常基本的——因为我不知道您当前的代码是什么——但我没有发现StopRopagation()有任何问题

为了进行实验,如果您删除
e.stopPropagation()
您将看到,当您单击一个链接时,它首先启动该函数,然后启动div的函数。

这里有一个提琴:

这是非常基本的——因为我不知道您当前的代码是什么——但我没有发现StopRopagation()有任何问题


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

请发布您迄今为止尝试过的相关代码。是否忘记将
事件
参数传递给
上的单击处理程序请发布您迄今为止尝试过的相关代码。是否忘记将
事件
参数传递给
上的单击处理程序