gpt4 book ai didi

javascript - 递归函数导致其他调用多次触发

转载 作者:行者123 更新时间:2023-12-02 18:29:30 27 4
gpt4 key购买 nike

我正在开发一个问答游戏,其中向用户提供一条引言,并必须猜测作者:

  function startGame(quotes) {
askQuestion(quotes[0], 0, 0);

function askQuestion(quote, question, score) {
var q = "<span class='quo'>&ldquo;</span><em>" + quote.quote + "</em><span class='quo'>&rdquo;</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()有关——看起来函数的整个“历史”都是循环的。我之前遇到过类似的问题 - 对于正确答案,分数全局变量会按之前正确答案的数量增加(而不是仅增加一个)。

知道如何解决这个问题吗?谢谢!

编辑:根据要求,这里有一个 JSfiddle

最佳答案

实际上很容易修复。您一遍又一遍地重新附加点击监听器,因此每次设置时将其删除即可。

改变

  $('.choice').click(function (e) {

  $('.choice').off().click(function (e) {

http://jsfiddle.net/NADYM/

关于javascript - 递归函数导致其他调用多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17973302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com