不需要的递归-如何避免子点击事件在jquery中传递给父点击事件?

不需要的递归-如何避免子点击事件在jquery中传递给父点击事件?,jquery,Jquery,我有一些元素,大致如下: <div> <a> <div> 问题是,这单击了a元素,但事件传播到div,div单击它,后者单击a,后者。。好。你可以看到它的去向 我在JSFIDLE上制作了一个示例: 但是JSFIDLE不显示日志。所以如果你点击,firebug不会显示任何东西。但是我的本地站点让firebug疯狂地使用日志(点击),以至于最终脚本被杀死,并在页面上说太多递归 如何停止这种递归 ps:是的,我知道,我知道我可以使用window.locat

我有一些元素,大致如下:

<div>
    <a>
<div>
问题是,这单击了
a
元素,但事件传播到div,div单击它,后者单击a,后者。。好。你可以看到它的去向

我在JSFIDLE上制作了一个示例:
但是JSFIDLE不显示日志。所以如果你点击,firebug不会显示任何东西。但是我的本地站点让firebug疯狂地使用日志(点击),以至于最终脚本被杀死,并在页面上说
太多递归

如何停止这种递归

ps:是的,我知道,我知道我可以使用window.location,但是单击链接会做一些额外的工作,并且还会使用浏览器的窗口历史记录,所以我真的想单击恶意的
a
,而不必让它单击它的爸爸。或者妈妈。或者不管那个div是什么

请阅读

由于每个人都在一遍又一遍地建议同一件事,而且它不起作用,请看一看JSFIDLE:在回答之前先试试看它是否起作用。当你点击一个div时,谷歌应该加载。这就是我想要的


谢谢。

使用
event.stopPropagation()
方法

$('div.class').click(function(event){  
    event.stopPropagation();
    $('a.class', this).click();
    console.log('clicked'); 
});
您需要在处理程序中添加
event
参数和
stopPropagation
方法

如何


$('selector').attr('onclick')()

如果这是您的标记:

<div>
 <a>
<div>
锚元素随后将拉伸并占用父div中的所有可用空间。如果该div中存在其他元素,则可以执行以下操作:

$('a.class').click(function(event){
   event.stopPropagation();
   alert('you clicked on me');
});

$('div.class').click( function () {
  $(this).children('a.class').trigger('click');
});

不要在子节点上使用单击事件,只需将浏览器位置设置为href值即可

$('div.class').click(function(){
  location = $(this).find('a').attr('href');
});

您好,表示事件未定义。我正在谷歌上搜索这个事件,但你们能试试JSFIDLE看看你们能不能让它工作起来?很多人都感谢它,让它工作了(我的意思是,让StopRopAgation工作了-我必须将事件添加到函数中)-但它也没有做任何事情。StopRopAgation只对祖先事件有效。它仍然会尝试开火,因为你指的是事件本身。你需要重新构造你的代码。试过了,什么也做不了。也尝试了
event.preventDefault()
。运气不好:(你不能在div上做一个a排列。这样,当用户点击div时,就会点击链接。我认为实际上SuperTramp的解决方案是一种更明智的方法来实现我的建议我,我试过了,它什么都没做。你能在JSFIDLE上试一下,看看你能不能让它工作?它对我有效当然你必须这样做添加class=“class”对于div和a标记,检查jsfiddle上的结果:在下面的第二个版本中,我添加了css,这样您就可以看到如果您单击锚点或父div,事件就会被触发,请检查:太好了!我正试图停止div本身的传播,我看到代码稍微重新构造,传播必须停止来自孩子!非常感谢!我无法告诉你我有多高兴学会了这种行为。你能返回false来停止活动吗?只是尝试了一下,我没想到它会起作用,它没有。呜呜,那不是我投的反对票,正如你所知。别担心。我只是从臀部开枪。这就是我得到的
$('a.class').click(function(event){
   event.stopPropagation();
   alert('you clicked on me');
});

$('div.class').click( function () {
  $(this).children('a.class').trigger('click');
});
$('div.class').click(function(){
  location = $(this).find('a').attr('href');
});