Функция JavaScript зацикливается в два раза чаще - PullRequest
0 голосов
/ 13 декабря 2010

Я пытаюсь использовать функцию в JavaScript (+ JQuery), которая похожа на систему калибровки звука. Он запускается в одном частотном диапазоне, воспроизводит его, спрашивает пользователя, слышат ли они его, - затем, если он может знать самую низкую частоту своей системы, и если нет, он переходит в следующий диапазон, а затем перепроверяет и т. Д. найдена самая низкая частота.

Однако, когда я запускаю функцию, она, кажется, запускается сама в два раза чаще каждый раз. Из предупреждения testFreqNum я мог видеть первый раз, когда он добавил 1 один раз, второй раз, когда он добавил 1, затем добавил его снова, в третий раз он сделал это 4 раза, затем 8 и т. Д.

Вероятно, легко исправить ошибку - я новичок в JavaScript, так что, может быть, вы можете увидеть это сразу? Спасибо.

function testFreq(band, testType){

if (testType == 'testLow') {
    $('#calibrationText').html('<h5>Testing ' + freqs[band] + 'Hz...</h>');
    playSound('Tones', band);
    //window.setTimeout(function(){
    $('#calibrationText').html('<h5>Could you hear ' + freqs[band] + 'Hz clearly?</h>');
    $('#yes').fadeIn(500).click(function(){

        bandMin = band;//sets randGen's min availible band value
        testFreqNum = 31;//sets test frequency to upper high
        testFreq(testFreqNum, 'testHigh');//runs calibrator again in high mode starting band 31
        $('#yes').fadeOut(500);
        $('#no').fadeOut(500);
    });

    $('#no').fadeIn(500).click(function(){

        testFreqNum = testFreqNum + 1;
        alert(testFreqNum);
        testFreq(testFreqNum, 'testLow');//runs calibrator again in low mode
        //$('#yes').fadeOut(500);
        //$('#no').fadeOut(500);
    });
    // }, 4000);
}

... и остальные ...

1 Ответ

4 голосов
/ 13 декабря 2010

Вы связываете дополнительный обработчик клика каждый раз, если вы хотите изменить его, просто сначала .unbind(), например:

 $('#yes').fadeIn(500).unbind("click").click(function(){

... и то же самое для #no, в противном случае каждый раз, когда вы вызываете .click(), вы присоединяете новый обработчик события click, но не удаляете предыдущий, поэтому оба получают выполнено ... и каждый раз добавляется дополнительный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...