2012-11-19 53 views
0

編輯**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]; 
+3

它是如何崩潰?你是什​​麼意思**崩潰**? –

+0

什麼瀏覽器崩潰?我現在有類似的問題 - Firefox點擊事件崩潰。但只有Firefox。 – oyatek

+0

當我使用按鈕輸入下一個單詞時,它會卡在那個單詞上,不會在@ MD.Unicorn上移動 –

回答

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; 
    } 

更改,而條件有一個限制值,或者它會無休止地循環(因爲遞減操作總是成功)。

+0

事情是我甚至不需要觸發器('點擊')。檢查編輯@ user1800246 –

+1

+1指向無限循環 –

+0

您需要提供shuffleEqually和hintSound.play()的代碼,以便我們能夠提供另一個可能的循環線索,因爲目前我有不知道他們做了什麼或者他們如何做。 –

相關問題