2016-09-13 5 views
2

Ich muss kontinuierliche Eingabe-Taste in jquery drücken finden. Ist das möglich?Wie kann verhindert werden, dass die Eingabetaste mehrmals mit jquery gedrückt wird?

$('#password-input').keyup(function(e) { 
    if (e.which == 13) { 
     alert("Enter key") 
    } 
}); 

Hier Wenn ich bin ENTER Taste mehr als einmal meine ich Benachrichtigungen über zwei Mal bin immer. Aber ich brauche nur ein einziges Mal.

Bitte helfen Sie mir!

+1

mehr als einmal zur gleichen Zeit :)) – madalinivascu

Antwort

0

eine Variable verwenden, um den Zustand zu speichern

var pressed = false; 
$('#password-input').keyup(function(e) { 
    if (!pressed) { 
     if (e.which == 13) { 
      pressed = true; 
      alert('Enter key'); 
     } 
    } 
}); 
0

Verwenden .setTimeout() Verzögerung für die Anzeige Alarm einzustellen. Wenn in der Verzögerungszeit die Eingabetaste erneut gedrückt wird, entfernen Sie das vorherige Timeout und setzen Sie ein neues Timeout. Am Ende der Zeitüberschreitung wird eine Warnung angezeigt.

var interval; 
 
$('#password-input').keyup(function (e) { 
 
    if (e.which == 13) { 
 
     clearInterval(interval); 
 
     interval = setTimeout(function(){ 
 
      alert("Enter key") 
 
     }, 500); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="password-input" />

Sie können Zeit der Verzögerung auf Ihre individuelle Zeit ändern.

3

können Sie jQuery#bind verwenden, um das keyup Ereignis zu binden und als das mit jQuery#unbindkeyup Ereignis entbinden, wenn die Endbenutzer pres der „Enter-Taste“, um mehrere Male der „Enter-Taste“ zu verhindern:

var $passwordInput = $('#password-input'); 
 

 
$passwordInput.bind('keyup', function(e) { 
 
    passwordInputKeyupHandler(e); 
 
}); 
 

 
function passwordInputKeyupHandler(e) { 
 
    if (e.which === 13) { 
 
    console.log('Enter key!'); 
 
    $passwordInput.unbind('keyup'); 
 

 
    return setTimeout(function(){ 
 
     console.log('Rebind keyup event'); 
 
     $passwordInput.keyup(passwordInputKeyupHandler); 
 
    }, 2000); 
 
    } 
 

 
    console.log('Any other key...'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="password-input" type="password">

Beachten Sie, dass, wie durch @dorado auf den Kommentaren darauf hingewiesen, eine ‚rebind‘ nach 2 Sekunden hergestellt wurde, unter Verwendung von setTimeout(), um den Endbenutzer zu vermeiden haben Um eine Seite neu laden zu lassen.

+2

Sie können auch ‚rebind‘ nach wenigen Sekunden mit 'setTimeout'. – dorado

+0

Ich stimme völlig zu .. Es ist am meisten getan, um zu vermeiden, dass der Endbenutzer ein Reload der Seite –

+1

Ich habe einen Ereignis-Trigger innerhalb meiner Event-Handler-Funktion gebunden. Wenn ich die "Eingabe" entpacke, wenn die Eingabetaste gedrückt wird und einen Ajax-Aufruf auslöst, wenn der Ajax-Aufruf abgeschlossen ist, verbinde ich die "Eingabe" erneut mit "Schlüssel". Garantiert, dass der Ajax-Aufruf abgeschlossen ist, sodass ich "keyup" nicht vorläufig neu binden muss (was den Zweck zunichte machen würde, dies alles von vornherein zu tun). –

1

Neben der Verwendung einer Variable zum Speichern des Zustands Ich nehme an, Sie wollen auch, dass, wenn ein paar Millisekunden vergangen sind, drücken Sie die Eingabetaste erneut gibt Ihnen eine Warnung. Dies kann durch setTimeout erreicht werden. Zum Beispiel wird hier die Eingabetaste nur dann erneut erkannt, wenn sie nach einem Intervall von 2000 ms gedrückt wird.

var pressed = false; 
$('#input-element').keyup(function(e) { 
    if (!pressed) { 
     if (e.which == 13) { 
      pressed = true; 
      alert('Enter pressed.'); 
      i = setTimeout(function() { 
       pressed = false; 
      }, 2000); 

     } 
    } 
}); 
+0

es funktioniert gut. Ich verbringe viel Zeit für dieses Problem. Vielen Dank Dorado. –

+0

Sie können die if-Anweisungen auf "if (! Pressed && e.which === 13) {...}" reduzieren. Beachten Sie auch, dass Sie 'setTimeout()' nicht einer undefinierten 'i'-Variablen zuweisen müssen –

+0

Sie sind herzlich willkommen @GokulKumar. :) – dorado

0
var pressed = false; 
    $('#password-input').on('keyup',function(e) { 
     if (e.which == 13 && !pressed) { 
      pressed = true; 
      alert("Enter key"); 
     } 
    }); 
+1

Bitte bearbeiten Sie mit mehr Informationen. Code-only und "try this" Antworten werden abgeraten, da sie keine durchsuchbaren Inhalte enthalten und nicht erklären, warum jemand "das versuchen sollte". – abarisone

Verwandte Themen