使用委托JQUERY时,JQUERY事件多次触发



我在代码中使用委托jquery,但当它触发某个事件时,它会多次触发,我知道这是因为我已经将optionclicked类的事件绑定到boxes主类别,但我不得不将这些类别相互绑定,因为使用optionclicked类的内容是动态生成的。有没有办法解决这个问题,让事件只触发一次意味着它调用函数一次,显示弹出操作一次,发布数据一次等等。

$('.boxes-main').on('click', '.optionclicked', function(){
    // do something
    var timetoclick = parseFloat($('#time').text());
    clearInterval(myCounter);
    var optionclicked = $(this).attr('data');
    var questionid = $(this).attr('data2');
    $.post("quesanscheck.php", {
        ans : optionclicked,
        id : questionid,
        time : timetoclick
    }, function(data, status) {
        alert(data);
        if(data == optionclicked)
        {
            //alert("dfad");
            setTimeout(function(){ rightans(); }, 1000);
        }
        else
        {
            // wrong ans red
            if(optionclicked == 'A')
            {
                document.getElementById('op1').style.background = "red";
                document.getElementById('op1').style.border = "0px";
            }
            if(optionclicked == 'B')
            {
                document.getElementById('op2').style.background = "red";
                document.getElementById('op2').style.border = "0px";
            }
            if(optionclicked == 'C')
            {
                document.getElementById('op3').style.background = "red";
                document.getElementById('op3').style.border = "0px";
            }
            if(optionclicked == 'D')
            {
                document.getElementById('op4').style.background = "red";
                document.getElementById('op4').style.border = "0px";
            }
            // right ans green
            if(data == 'A')
            {
                document.getElementById('op1').style.background = "green";
                document.getElementById('op1').style.color = "white";
                document.getElementById('op1').style.border = "0px";
            }
            if(data == 'B')
            {
                document.getElementById('op2').style.background = "green";
                document.getElementById('op2').style.color = "white";
                document.getElementById('op2').style.border = "0px";
            }
            if(data == 'C')
            {
                document.getElementById('op3').style.background = "green";
                document.getElementById('op3').style.color = "white";
                document.getElementById('op3').style.border = "0px";
            }
            if(data == 'D')
            {
                document.getElementById('op4').style.background = "green";
                document.getElementById('op4').style.color = "white";
                document.getElementById('op4').style.border = "0px";
            }
            setTimeout(function(){wrongans();}, 1000);
        }
    });
}); 

我也遇到了类似的问题。

尝试将代码更改为:

$('.boxes-main').unbind('click').on('click', '.optionclicked', function(){

这将删除所有单击事件并添加单个事件。

当我对此进行研究时,点击事件触发了两次,尽管点击事件只添加了一次。

我找不到对我有帮助的原始SO帖子,但这对我很有用。

我将click事件与名为event的变量绑定,并添加了代码

event.stopPropagation();
 event.preventDefault();

这个解决了我的问题。

尝试使用:

event.stopPropagation();

它停止传播

相关内容

  • 没有找到相关文章

最新更新