【发布时间】:2015-11-19 08:03:43
【问题描述】:
我在我的代码中使用委托 jquery,但是当它触发某些事件时它会触发多次,我知道这是因为我已将 optionclicked 类的事件绑定到 boxes -main 类,但我必须将这些类相互绑定,因为使用 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);
}
});
});
【问题讨论】:
-
你能详细说明一下但是当它触发某些事件时,它会触发不止一次?
-
请在 JSFiddle 重现此问题。
-
你的元素是动态生成的吗?如果不是,那么您不需要使用事件委托,否则这可能是事件传播的问题。
-
这基本上是一个测验页面,其中问题和答案是动态加载的,在 box-main 类中,选项有类名 optionclicked,当我单击该选项时,我想触发事件但是它不止一次触发
标签: javascript jquery delegates jquery-delegate