【发布时间】:2015-10-19 15:24:41
【问题描述】:
我正在使用 jQuery,我正在尝试在 click 函数中为不同的链接添加一个点击触发器。这是我所拥有的:
$('.details .banner .banner_link').on("click", function(e){
e.stopPropagation();
e.preventDefault();
$('a.banner_link').trigger("click");
});
如您所见,我正在使用 stopProp 和 PreventDef,但我仍然得到:
Uncaught RangeError: Maximum call stack size exceeded
这快把我逼疯了,我已经被困了一段时间了,请大家帮忙,或者至少为什么会这样?!
背景:
上面代码中的.banner_link 和a.banner_link 是同一页面上的两个独立链接。我获取了 a.banner_link 的 html 并将其(通过 js)添加到页面上,以在单独的位置显示相同的链接。
我想在新创建的链接中模拟原始链接的行为(它会导致弹出模式),因此我使用 trigger("click") 函数来执行此操作。
注意:
如果我只是在外部点击函数范围之外运行触发器('click'),它运行良好!
【问题讨论】:
-
您需要在触发点击之前禁用您的处理程序。就目前而言,您的处理程序称自己为无限。
-
您明确调用“点击”,因此点击被重新称为无限;它与默认行为无关...
-
您的代码显示,“每当单击
.banner_link元素时,请单击所有a.banner_link元素。”这似乎是非常简单的无限递归。也许您的误解源于“.banner_link和a.banner_link... 是同一页面上的两个独立链接”这句话——选择器.banner_link适用于类banner_link的所有元素。为什么你认为这些不会包含在选择器a.banner_link描述的元素中? -
您已经为
.banner_link定义了一个点击函数,它会在.banner_link上触发一个点击事件,因此它会无限循环,直到它被您的浏览器停止。
标签: javascript jquery google-chrome stack-overflow