JQuery Click事件崩溃程序没有控制台错误

时间:2012-11-19 08:56:11

标签: javascript jquery

编辑**

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

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

//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];

1 个答案:

答案 0 :(得分: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条件更改为具有限制值,或者它将无限循环(因为递减操作总是成功)。