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

时间:2011-04-19 17:13:24

标签: jquery

我有一些元素,大概是这样的:

<div>
    <a>
<div>

当用户点击div上的任意位置时,我希望点击a元素 - 出于可用性目的。

简单吧?所以我写了这个:

$('div.class').click(function(){  
    $('a.class', this).click();
    console.log('clicked'); 
});

麻烦的是,这会点击a元素,但事件会传播到div,点击它会点击a,这就好了。你可以看到它的去向。

我在jsfiddle上制作了一个样本:http://jsfiddle.net/XD6Vm/2/
但是jsfiddle没有显示日志。所以,如果你点击,萤火虫没有显示任何东西。但我的本地网站设置firebug疯狂的日志(点击),以至于最终脚本被杀死说too much recursion on this page

如何停止此递归?

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

请仔细阅读

由于每个人都在反复提出同样的建议并且不起作用,请看一下jsfiddle:http://jsfiddle.net/XD6Vm/2/尝试一下,看看它是否有效,然后再回答。当你点击一个div时,谷歌应该加载。这就是我想要的。

感谢。

5 个答案:

答案 0 :(得分:4)

如果这是你的标记:

<div>
 <a>
<div>

您需要做的就是在您的CSS中执行以下操作:

div a { display: block};
然后,锚元素将拉伸并占据父div中的所有可用空间。如果该div中存在其他一些元素,那么你可以这样做:

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

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

答案 1 :(得分:2)

使用event.stopPropagation()方法。

答案 2 :(得分:1)

这个怎么样?

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

$('div.class').click(function(event){  
    event.stopPropagation();
    $('a.class', this).click();
    console.log('clicked'); 
});

您需要在处理程序中添加event参数和stopPropagation方法