JavaScript函数每次运行时循环的次数是以前的两倍

JavaScript函数每次运行时循环的次数是以前的两倍,javascript,jquery,function,loops,Javascript,Jquery,Function,Loops,我试图在JavaScript(+JQuery)中使用一个函数,它类似于声音校准器系统。它从一个频段开始播放,询问用户是否能听到,然后询问用户是否知道系统的最低频率,如果不知道,则转到下一个频段,然后重新检查等,直到找到最低频率 但是,当我运行该函数时,它似乎每次运行自身的次数是原来的两倍。从testFreqNum警报中,我可以看到它第一次添加1次,第二次添加1,然后再次添加,第三次添加4次,然后是8次,以此类推 可能是一个很容易纠正的错误-我是JavaScript新手,所以您可以直接看到它?谢谢

我试图在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);
}
函数testFreq(频带,测试类型){
如果(testType='testLow'){
$('#calibrationText').html('测试'+freqs[band]+'Hz…');
播放声音(“音调”,乐队);
//setTimeout(函数(){
$(“#calibrationText”).html('你能清楚地听到'+freqs[band]+'Hz吗?');
$(“#是”).fadeIn(500)。单击(函数(){
bandMin=band;//设置randGen的最小可用频带值
testFreqNum=31;//将测试频率设置为上限
testFreq(testFreqNum,'testHigh');//在高模式起始频带31中再次运行校准器
美元(“#是”)。淡出(500);
$('否')。淡出(500);
});
$('#no')。fadeIn(500)。单击(函数(){
testFreqNum=testFreqNum+1;
警报(testFreqNum);
testFreq(testFreqNum,'testLow');//在low模式下再次运行校准器
//美元(“#是”)。淡出(500);
//$('否')。淡出(500);
});
// }, 4000);
}
…其余的…

您每次都会绑定一个额外的单击处理程序,如果您想更改它,请先执行以下操作:

 $('#yes').fadeIn(500).unbind("click").click(function(){
…对于
#no
,情况也是如此,否则每次调用时都会附加一个新的
单击事件处理程序,但不会删除以前的事件处理程序,因此每次都会执行这两个事件处理程序…并添加一个附加的事件处理程序。

如果要更改它,请先绑定一个附加的单击处理程序,如下所示:

 $('#yes').fadeIn(500).unbind("click").click(function(){
…对于
#no
,情况也是如此,否则每次调用时都会附加一个新的
单击事件处理程序,但不会删除上一个事件处理程序,因此这两个事件处理程序都会执行…并且每次都会添加一个额外的事件处理程序