2017-01-12 5 views
0

私はそれが動作するように見えることはできません。clearTimeoutはletとconstで動作しますか?

openContactUsForm(stop: Boolean = false) { 
    let openContactForm = setTimeout(() => { 
    $('#myButton').click(); 
    }, 6000); 
    if (stop) { 
    clearTimeout(openContactForm); 
    $('#myButton').click(); 
    } 
} 

タイムアウトがまだでも、それはあなたが真として渡されたストップで再びそれを呼び出した後、一度メソッドを呼び出しているどのように聞こえるかからtrue

+1

このメソッドをどのように正確に呼び出していますか?あなたはstop param(別名false)でそれを最初に呼び出してから、同じメソッドをtrueで呼び出しますか?その場合、最初のコールからのタイムアウトを2回目のコールで停止することは期待できません。 –

+0

これはうまくいくようです。これはどこで使用されていますか? デモがあります:http://jsbin.com/laqideqari/2/edit?js,console,output – leocreatini

答えて

1

としてstopブール値を通過した後、6秒後にクリックします。その場合には、メソッドを呼び出すときには、openContactFormがもう一度定義されます。反応コンポーネントにいる場合にこれを行う方法の1つは、タイマーをコンポーネントのプロパティとして設定することです。

あなたはES6クラスを行っている場合は、コンストラクタで、最初はそれを定義することができ

constructor() { 
    super() 
    this.timer = null; 
} 

openContactUsForm(stop: Boolean = false) { 
if (stop) { 
    clearTimeout(this.timer); 
    $('#myButton').click(); 
    return; 
    } 
    this.timer = setTimeout(() => { 
    $('#myButton').click(); 
    }, 6000); 

} 

あなたのタグが間違っているとreactjsを使用していない場合は、あなただけそのように、それのトップレベルのスコープでタイマーを定義する必要がありますその関数を呼び出すたびに書き換えられていないため、タイマーIDが変更され、元のタイマーは停止しません。

+0

これはOPが書いたコードと実際には違いはありません。 'stop'を' true'として呼び出すと、以前に保存されたタイムアウトIDは上書きされ、新しく保存されたタイムアウトIDは直ちにクリアされます。 –

+0

良いcatch @ t.nieseが修正されました – finalfreq

関連する問題