【发布时间】:2018-08-15 13:40:59
【问题描述】:
我有两个带有动态链接的 div,它们有时会被填充,有时不会。如果您单击如下所示的链接:
<a href="#">
什么都没有发生,我阻止了默认操作,但是如果链接是:
<a href="/path/to/a/page">
它会随之而来。
我希望能够点击周围的 div,并使用与上述相同的逻辑。所以如果我点击红色并且有一个有效的链接,链接就会跟随。我正在使用trigger() 来尝试这个。
情况如下:
$(function() {
$(".container").click(function(e) {
var clickTarget = $(e.target).attr("href");
var clickTargetLink = $(this).find(".container-link");
if ((clickTarget != "#") || (clickTarget != undefined)) {
clickTargetLink.trigger("click");
} else {
e.preventDefault();
}
});
});
.container {
padding: 50px;
margin-bottom: 1rem;
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<a class="container-link" href="google.com">link</a>
</div>
<div class="container">
<a class="container-link" href="#">link</a>
</div>
最终发生的事情是点击链接中带有 google.com 的红色 div:
jquery.js:3988 Uncaught RangeError: 超出最大调用堆栈大小 在 String.replace() 在camelCase (jquery.js:3988) 在 Data.get (jquery.js:4069) 在 HTMLDivElement.dispatch (jquery.js:5146) 在 HTMLDivElement.elemData.handle (jquery.js:4991) 在 Object.trigger (jquery.js:8249) 在 HTMLAnchorElement。 (jquery.js:8327) 在 Function.each (jquery.js:354) 在 jQuery.fn.init.each (jquery.js:189) 在 jQuery.fn.init.trigger (jquery.js:8326)
Maximum call stack size exceeded error - 这表明此代码中某处存在无限循环。我不知道这里怎么可能是这种情况?
为什么这段代码会导致最大调用堆栈大小错误?
编辑:更多研究使我发现:Maximum call stack size exceeded on trigger click
去
.triggerHandler() 什么都不渲染,链接也没有跟随。我是否需要使用其他我不知道的操作?
编辑#2:更多细节:
- 我无法更改/添加标记结构。
- 红色的 div 必须是完全可点击的,因为当链接为空时,还有一个与之相关的操作:
<a href="#"> - 我尝试了
e.stopPropagation();- 解决了错误,但链接没有跟随 - 我试过
triggerHandler()- http://api.jquery.com/triggerhandler/
【问题讨论】:
-
你的点击处理器触发了点击事件,由点击处理器处理,点击处理器触发点击事件,...
-
检查浏览器控制台,它显示
too much recursion(在 Firefox 中)。您正在递归触发点击事件
标签: javascript jquery