Javascript 触发单击事件会使浏览器崩溃
检查此链接: 单击div时,我希望内部的链接触发单击事件。 但控制台显示,单击事件会一直触发,直到浏览器崩溃。为什么会这样?解决办法是什么 真正的div里面有很多内容,所以我不希望标签覆盖整个div或者将div包装在标签中。此函数适用于移动设备。因为在每次单击事件中,您都会再次调用单击,从而导致无休止的递归 由于您的单击处理程序位于具有box类的div上,因此单击这些div内的任何内容都将导致该div上的单击事件 似乎你想点击div来跟踪链接?您可以这样做,而不是点击链接:Javascript 触发单击事件会使浏览器崩溃,javascript,jquery,Javascript,Jquery,检查此链接: 单击div时,我希望内部的链接触发单击事件。 但控制台显示,单击事件会一直触发,直到浏览器崩溃。为什么会这样?解决办法是什么 真正的div里面有很多内容,所以我不希望标签覆盖整个div或者将div包装在标签中。此函数适用于移动设备。因为在每次单击事件中,您都会再次调用单击,从而导致无休止的递归 由于您的单击处理程序位于具有box类的div上,因此单击这些div内的任何内容都将导致该div上的单击事件 似乎你想点击div来跟踪链接?您可以这样做,而不是点击链接: window.lo
window.location = $(this).find(".link").attr("href");
试试这个。它停止无限循环。但更好的问题是,为什么要这样做
$(".box").click(function(e){
console.log("clicked");
$(this).find(".link").trigger("click");
});
$(".link").click(function(e){
e.stopPropagation();
});
当您触发单击.link时,该事件会跳转到其父事件,并最终再次到达.box。因此进入递归。 为了防止这种情况,你可以做如下的事情
$(".box").click(function(e){
if(e.currentTarget == e.target)
{
console.log("clicked");
$(this).find(".link").trigger("click");
}
});
e.target是事件发生的元素,e.currentTarget是事件绑定的元素
建议再提供一种替代解决方案
$(".box").click(function(e){
console.log("clicked");
$(this).find(".link").trigger("click");
});
$(".link").click(function (e)
{
/*This would prevent a click triggered on ".link" to propagate upto its parent i.e ".box" */
e.stopPropagation();
});
@我认为递归应该是当你希望循环发生的时候。另外,没有基本情况。@G\M它不是一个循环;函数本质上是调用自己,所以这是递归。缺乏基本情况是导致问题的原因:它会无限递归。是的,而且还值得扩展答案,说明递归发生的原因。或者,你知道,不要调用$this.find.link.triggerclick;因为它什么都不做。哈哈,真的。但是没有人有时间做那些逻辑的事情。触发元素的点击事件的目的是什么?时间戳:27/03/2013 19:34:06错误:太多递归源文件:行:2749