在锚点上触发 click() 命令时出现"太多递归"错误



在我的代码中,我想单击div 并让它在指定的元素 ID 上触发click(),但是我得到了这个递归错误,就像它在无限循环中一样。

function clickLink(id) {
$('#' + id).click();
}
.theDiv {
border: 1px solid red;
width: 200px;
height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
click the div, but not on the link
<div class="theDiv" onclick="clickLink('linkId')">
<a href="http://www.google.com" id="linkId">i am a link</a>
</div>

由于事件冒泡,这实际上是一个无限循环。在子元素上发生的事件将冒泡给父元素。在您的情况下,a#linkId上发生的单击将冒泡到父div并触发onclick处理程序(再次"单击"a#linkId(。

尝试使用 jquery 中的触发器

function clickLink(id) {
$('#' + id).trigger(”click”);
}

试试这个:

function clickLink(id) {
$('#' + id)[0].click();
}

可能仍然存在递归,但问题是您的单击函数不起作用。由于我们要离开页面(单击指向 google.com 的链接(,因此这并不重要。

有关点击事件的解释,请参阅罗曼·斯塔科夫的评论: 如何使用jQuery触发对链接的点击

最新更新