jQuery函数陷入循环
jQuery Function Stuck in Loop
我有一个简单的div,其中有一个链接:
<div class="mhButton">
<a href="#" id="RegisterAnimal"><span class="icon-checkmark"></span> Register Animal</a>
</div>
我有一个函数,每当单击"div.mhButton"时就会触发它。此函数应找到"div.mhButton"子级"a"并单击它。
$(".mhButton").on('click', function () {
var a = $(this).find("a").text();
console.log(a);
$(this).find("a").click();
});
然而,这是有效的,我陷入了一个运行639次的循环中。
我无法理解为什么这会运行X次,然后继续运行而没有错误。
有人能解决如何防止这种情况吗?并解释为什么会发生这种情况?
注意*控制台正在一次又一次地记录相同的按钮。
由于a
标记嵌入在按钮中,因此您将不断重新启动事件。事件将弹出,因此将单击锚点,然后单击其父锚点。它一直在运行,直到浏览器厌倦了运行它,然后它就停止了。该方法实际上并没有起到任何作用,这可能是你没有看到任何问题的原因。您可以通过以下几种方式实现目标:
$(".mhButton").click(function () {
$(this).off('click'); // turn the click handler off in the handler itself.
var a = $(this).find("a").text();
console.log(a);
$(this).find("a").click();
});
如果你这样做,那么你最终只能启动一次活动。
或者:
$(".mhButton").click(function (e) {
a = $(this).find("a").text();
console.log(a);
$(this).find("a").click();
});
$("#RegisterAnimal").click(function (e) {
e.stopPropagation(); // prevent the anchor from re-firing the button click
});
另外,您可以将链接样式设置为类似按钮,并避免不必要的单击处理程序。
调用$(this).find("a").click();
时,事件将冒泡到div.mhButton
标记,并导致再次调用处理程序。它运行大约500次的原因是因为它在堆栈溢出时停止,它不会继续
您可以通过检查点击是否是<a>
标签本身来防止它,在这种情况下不调用click()
工作示例:http://jsfiddle.net/mendesjuan/zdkrhh42/
注意关于已接受的答案
Bic的第二个答案几乎奏效,我的是一种不同的方法,副作用更少。调用stopPropagation
的主要问题是,在这种情况下,整个文档上可能有一些处理程序不会被解雇。常见的情况是,当您单击页面上的其他位置时,菜单或对话框应该隐藏。stopPropagation
方法将防止他们单击您的按钮时隐藏菜单。
$(".mhButton").click(function (e) {
// Only run this handler if the click was on the div, not the link itself
if ( $(e.target).is('a, a *') ) {
return;
}
var a = $(this).find("a").text();
$(this).find("a").click();
});
- JavaScript/Jquery:一个特殊用途的for循环函数
- 为循环函数中的元素指定单击
- Jquery下一个和上一个按钮循环函数
- 循环函数(Javascript回调帮助)
- 循环函数不起作用
- 使用ajax调用循环函数
- 在Javascript中修改循环函数的参数
- 如何循环函数数组并在单击时一次执行一个
- 设置超时可以保存我的循环函数不被视为无响应
- 具有超时的循环函数
- j查询如何在一系列延迟后循环函数
- 如何将 JavaScript forEach 循环/函数转换为 CoffeeScript
- for 循环函数似乎未运行
- 对于内部循环函数(新手)
- 循环函数会导致它在 javascript 中无响应
- 循环函数
- 如何优化循环函数
- JS拒绝循环函数
- 中断循环函数
- 在 JavaScript 中循环函数可以吗?