我正在使用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已经解决了我的问题。非常感谢大家的帮助。
答案 0 :(得分:3)
既然你现在为什么会这样做,而不是给元素提供独特的类,你可以解决问题,如果你在事件被解雇后停止听取它:
$('.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);
});
答案 1 :(得分:2)
为了澄清评论:
问题是如果选择器只包含一个类,.one()将为类的每个元素执行一次。这在JQuery API中描述:
.one(events [,data],handler)
说明: 将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序。
具体来说,如果同一个类的页面上有10个元素,.one()将执行10次。
答案 2 :(得分:2)
如果你想要一个函数运行一次,你可以尝试这样的东西,它不是完美的,但它应该工作:
编辑 - 添加小提琴
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个具有相同类的元素,它将运行一次,十次(每个元素一次)。换句话说:
{1} {2} {3}
我点击{1},{1}无法再次点击,该功能将无法运行