0

编辑**

在我正在创建的游戏中,如果用户对当前问题有疑问,我会使用下一个问题按钮移动到网格中的其他问题。目前我遇到了真正的问题,因为它不断使我的程序崩溃,并且没有给出任何控制台错误。我遇到的最后一个问题是它说“递归过多”。从那以后我以为我已经解决了这个问题,但我只是做了一些测试,每次都崩溃。

这是按钮的点击事件...

//Next question click event
$('.next-question').bind("click", function() {
    $('td').removeClass('highlight-problem');
    shuffleEqually(listOfWords);
    shuffleEqually(nextWordIndexes);
    var rndWord = nextWordIndexes[Math.floor(Math.random())];
    var rndWord = nextWordIndexes[2];
    //Adds and removes nesesary classes
    $('td[data-word="' + listOfWords[rndWord].name + '"]').addClass('highlight-problem');
    $('td[data-word=' + word + ']').removeClass('wrong-letter').removeClass('wrong-word').removeClass('right-letter');
    var spellSpace = $('td[data-word="' + listOfWords[rndWord].name + '"]').hasClass('right-word');
    if (spellSpace) {
        $('.next-question').trigger('click');
    } else {
        $("#hintSound").attr('src', listOfWords[rndWord].audio);
        hintSound.play();
        $("#hintPic").attr('src', listOfWords[rndWord].pic);
        $('#hintPicTitle').attr('title', listOfWords[rndWord].hint);
    }
});

我认为这可能与 if 语句有关,但已尝试将其更改为此..

if (spellSpace == false) {

    $("#hintSound").attr('src', listOfWords[rndWord].audio);
    hintSound.play();
    $("#hintPic").attr('src', listOfWords[rndWord].pic);
    $('#hintPicTitle').attr('title', listOfWords[rndWord].hint);
}

它使情况变得更糟

ShuffleEqually:

//Shuffles words to randomize
shuffleEqually(nextWordIndexes);
var shuffledWords = [];
shuffledWords = chosenWords.sort(function () {
    return 0.5 - Math.random();
});

function shuffleEqually(a1, a2) {
    var arrays = [];
    if (typeof a1 === 'object' && a1.length > 0) {
        arrays.push(a1);
    }
    if (typeof a2 === 'object' && a2.length > 0) {
        arrays.push(a2);
    }
    var minLength = arrays[0].length;
    jQuery.each(arrays, function (i, a) {
        minLength = a.length < minLength ? a.length : minLength;
    });
    var randoms = [];
    for (i = 0; i < minLength; i++) {
        randoms.push(Math.random());
    }
    jQuery.each(arrays, function (i, a) {
        var i = minLength;
        while (i--) {
            var p = parseInt(randoms[i] * minLength);
            var t = a[i];
            a[i] = a[p];
            a[p] = t;
        }
    });
};

提示音:

var hintSound = $("#hintSound")[0];
4

1 回答 1

3

您的问题是一个无限循环,简单明了。

$('.next-question').bind("click", function() {
// binds click...
...


if (spellSpace) {
    $('.next-question').trigger('click');
    // triggers click ON THE SAME ELEMENT COLLECTION (same selector)

你想细化这一点。我假设您希望触发器在下一个问题上起作用,因此我建议将第二个语句更改为:

 $(".next-question").eq(($(".next-question").index($(this)) + 1) % $(".next-question").length).trigger("click");

在 shuffleEqually 中有第二个无限循环:

   jQuery.each(arrays, function (i, a) {
    var i = minLength;
    while (i--) {
        var p = parseInt(randoms[i] * minLength);
        var t = a[i];
        a[i] = a[p];
        a[p] = t;
    }

将 while 条件更改为具有限制值,否则它将无限循环(因为减量操作总是成功)。

于 2012-11-19T09:04:25.203 回答