我正在开展一个问答游戏,其中向用户显示引用并且必须猜测作者:
function startGame(quotes) {
askQuestion(quotes[0], 0, 0);
function askQuestion(quote, question, score) {
var q = "<span class='quo'>“</span><em>" + quote.quote + "</em><span class='quo'>”</span>";
$('.choice').css('visibility', 'visible');
$('#questions').html(q);
$('.choice').click(function(e){
$('.choice').css('visibility', 'hidden');
e.preventDefault();
var nextq = (question + 1);
var btntxt = (nextq < number_of_questions ? 'Next...' : 'Final results');
if ($(this).attr('data-author') === quote.author) {
score++;
$('#questions').html('<h1>Correct.</h1><a class="btn next">' + btntxt + '</a>');
document.getElementById('win').play();
} else {
$('#questions').html('<h1>Wrong.</h1><a class="btn next">' + btntxt + '</a>');
document.getElementById('lose').play();
}
$('#questions').append('<h4>Score: ' + score + '/' + nextq + '</h4>');
$('.next').on("click", function(){
question += 1;
if (question < number_of_questions) {
askQuestion(quotes[question], question, score);
} else {
tallyScore(score);
}
});
});
}
}
当提出问题时,如果询问的问题少于6个,则再次调用askQuestion()函数。
一切都很好,但我的音效有问题。如果用户得到正确答案然后答案错误,则同时播放“胜利”和“失败”声音效果。
我的猜测是,这与我的递归调用askQuestion()有关 - 看起来函数的整个“历史”都是循环的。我之前遇到过类似的问题 - 在正确的答案中,得分全局变量增加了先前正确答案的数量(而不仅仅是1)。
知道如何解决这个问题吗?谢谢!
修改:根据要求,这是JSfiddle。
答案 0 :(得分:1)
变化
$('.choice').click(function (e) {
到
$('.choice').off().click(function (e) {
答案 1 :(得分:1)
每次调用askQuestion时,都会向html元素添加一个事件处理程序。因此,当您单击.choice
元素时,将运行多个事件。
尝试为所有生成的元素提供唯一ID,并使用该id附加事件处理程序。