Von vorbei, wie es sich anhört Sie die Methode einmal anrufen, dann wieder mit dem Anschlag in als wahr geben aufrufen. In diesem Fall wird beide Male, wenn Sie die Methode aufrufen, die openContactForm
erneut definiert. Eine Möglichkeit, dies zu tun, wenn Sie sich in einer Reaktionskomponente befinden, besteht darin, den Zeitgeber als Eigenschaft für die Komponente festzulegen.
Wenn Sie ES6 Klassen tun Sie es zunächst im Konstruktor definieren
constructor() {
super()
this.timer = null;
}
openContactUsForm(stop: Boolean = false) {
if (stop) {
clearTimeout(this.timer);
$('#myButton').click();
return;
}
this.timer = setTimeout(() => {
$('#myButton').click();
}, 6000);
}
wenn Ihre Tags falsch sind und nicht reactjs verwenden, müssen Sie nur den Timer in der obersten Ebene Umfang es auf diese Weise definieren, wird nicht jedes Mal neu geschrieben, wenn Sie diese Funktion aufrufen, wodurch sich die Timer-ID ändert und der ursprüngliche Timer nicht gestoppt wird.
Wie genau nennen Sie diese Methode? Nennen Sie es zuerst ohne stop param (aka false) und rufen Sie dann dieselbe Methode mit true auf? Ist dies der Fall, können Sie nicht erwarten, dass die Zeitüberschreitung ab dem ersten Anruf durch den zweiten Anruf beendet wird. –
Das scheint zu funktionieren. Wo wird das verwendet? Hier ist eine funktionierende Demo: http://jsbin.com/laqideqari/2/edit?js,console,output – leocreatini