4

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

<div>
    <a>
<div>

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

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

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

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

我在这里在 JSfiddle 上制作了一个示例, 但它没有显示控制台日志。因此,如果您单击,Firebug 不会显示任何内容。但是我的本地站点使 Firebug 对日志(单击)如此之多以至于最终脚本被杀死说too much recursion on this page

如何停止这种递归?

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

请阅读

由于每个人都在一遍又一遍地建议同样的事情,但它不起作用,请看看这个JSfiddle。在回答之前尝试一下,看看它是否有效。当您点击 时div,Google 应该会加载。这就是我要找的。

4

5 回答 5

4

如果这是您的标记:

<div>
    <a></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');
});

 
于 2011-04-19T18:12:33.013 回答
3

使用event.stopPropagation()方法。

于 2011-04-19T17:20:43.350 回答
1

这个怎么样?

$('selector').attr('onclick')()
于 2011-04-19T17:39:43.957 回答
1

而不是使用子节点上的点击事件,只需将浏览器位置设置为href

$('div.class').click(function(){
  location = $(this).find('a').attr('href');
});
于 2011-04-20T14:08:01.447 回答
0
$('div.class').click(function(event){  
    event.stopPropagation();
    $('a.class', this).click();
    console.log('clicked'); 
});

您需要将event参数和stopPropagation方法添加到处理程序。

于 2011-04-19T17:34:36.827 回答