0

私はこのコードを持っています:

$('.myButton').live('click',function(){
    var checkTextValue = setTimeout(function() {
    var textVal = $('p').text();
    if (textVal == 'expectedValue'){
        alert('done');
    } else {
       setTimeout(arguments.callee, 10);
    }
    },10);
 });

ボタンを初めてクリックすると問題なく動作しますが、ボタンを複数回クリックするとアラートがn回以上呼び出されます(ボタンをもう一度クリックするとアラートが表示されます->[OK]をクリックしてからもう1つのアラートが表示されます。この後、もう一度クリックすると3つのアラートが表示されます)。textVal =='expectedValue'がtrueを返した後に関数を削除する方法はありますか?

4

4 に答える 4

0

return false;ifステートメントのそのブランチの最後にaを付けてみることができますか?

または、などのフラグを設定しhasRun = 1、ifステートメントのそのブランチ内で何かを実行する前にその値を確認することもできます...

于 2009-10-26T20:28:13.193 に答える
0

タイムアウトを設定しているだけのelse状態では、「expectedValue」の値も更新する必要があります...そうですか?

そしてreturn、条件付きのブール値。

新しいブールフラグを使用することも、同じ目的で既存の値を使用することもできます。詳細が必要な場合はお知らせください。

于 2009-10-26T20:29:41.740 に答える
0

同時実行を防ぐためclearTimeoutに、呼び出す前に( を使用して) タイムアウトをクリアする必要があります。setTimeout

于 2009-10-26T20:39:49.910 に答える