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}不能再点击,函数不会运行

相关文章:
  • 没有找到相关文章