One()多次触发
one() firing more than one time
本文关键字:One 更新时间:2023-09-26
我正在使用one()事件处理程序,应该(我被引导相信)触发代码一次点击,但之后不执行它再次点击。在这里,它检查一个类是否可见,如果是,就给变量加10。问题是,我可以多次点击它,它一直在给变量加10。
我做错了什么吗?
$('.cme-confirm').one( "click", function(event) {
if ($(".this-correct")[0]){
case1Score = case1Score + 10;
}
event.stopImmediatePropagation();
console.log(case1Score);
});
提前感谢。
编辑
感谢Richard Cane,他解释说这是因为我有多个具有类名的元素。因此,它发射了不止一次。我打算给每个元素一个独特的类,但是Ruben Seratte已经解决了我的问题。非常感谢大家的帮助。
现在你知道为什么会发生,而不是给元素唯一的类,你可以解决这个问题,如果你停止监听事件后,它被触发:
$('.cme-confirm').on( "click.myId", function(event) {
jQuery('.cme-confirm').off("click.myId");
if ($(".this-correct")[0]){
case1Score = case1Score + 10;
}
event.stopImmediatePropagation();
console.log(case1Score);
});
为了便于注释:
问题是,如果选择器只包含一个类,.one()将对类的每个元素执行一次。这在JQuery API中有描述:
。1 (events [, data], handler)
描述:
为元素的事件附加一个处理程序。
具体来说,如果同一类的页面上有10个元素,.one()将执行10次。
如果您想要一个函数运行一次,您可以尝试这样做,它不是完美的,但它应该工作:
编辑 -添加小提琴
http://jsfiddle.net/ctwheels/p8u6apbs/
var runOnce = true;
$('.cme-confirm').on("click", function(event) {
if(runOnce){
if ($(".this-correct")[0]){
case1Score = case1Score + 10;
}
event.stopImmediatePropagation();
console.log(case1Score);
runOnce = false;
}
});
使用jquery的。one():
当前,您的函数对您拥有的每个类元素运行一次您的函数。因此,如果您有10个具有相同类的元素,它将运行一次,10次(每个元素一次)。也就是说:
{1} {2} {3}
我点击{1},{1}不能再点击,函数不会运行
相关文章:
- 没有找到相关文章