2010-12-13 5 views
0

J'essaie d'utiliser une fonction JavaScript (+ JQuery) qui ressemble à un système de calibrage sonore. Il commence à une bande de fréquence, le joue, demande à l'utilisateur s'il peut l'entendre - alors s'il peut connaître la fréquence la plus basse de son système et sinon il passe à la bande suivante puis re-vérifie etc. la plus basse fréquence est trouvée. Cependant, lorsque j'exécute la fonction, elle semble fonctionner deux fois plus de fois à chaque fois. De l'alerte testFreqNum je pouvais voir la première fois il a ajouté 1 fois, la deuxième fois il a ajouté 1 puis l'a ajouté à nouveau, la troisième fois il l'a fait 4 fois, puis 8 etcLa fonction JavaScript boucle deux fois plus de fois

Probablement une erreur facile à corriger - I suis nouveau à JavaScript alors peut-être que vous pouvez le voir tout de suite? Merci.

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

... et le reste ...

Répondre

4

Vous lier un gestionnaire supplémentaire clic à chaque fois, si vous voulez changer, juste .unbind() d'abord, comme ceci:

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

, sinon, chaque fois que vous appelez .click(), vous ajoutez un nouveau gestionnaire d'événements click, mais sans supprimer le précédent, donc les deux sont exécutés ... d un supplémentaire ajouté à chaque fois.