2015-08-10 8 views
19

Ich möchte die Kontrolle + A Ereignis im Eingang erkennen. Ich kann das Steuerelement + A Ereignis finden, aber die Funktion wird auch nach return false fortgesetzt.Detect Ctrl + A in keyup Ereignis

jsFiddle - http://jsfiddle.net/f6rcgpmh/4/

$('.searchTerm').keyup(function(e) { 
 

 
    $("#status").text(""); 
 

 
    if (e.ctrlKey) { 
 
     if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a' 
 
      console.log("Control pressed"); 
 
      e.preventDefault(); 
 
      return false; 
 
     } 
 
    } 
 
    $("#status").text("This should not work if Ctrl + A is pressed"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="search" class="search"> 
 
    <input class="searchTerm" placeholder="Filter Books..."> 
 
    <input class="searchButton" type="submit"> 
 
</form> 
 
<div id="status"></div>

Ich möchte dies in keydown in keyup nicht arbeiten. Weil ich Autosuche benutze und die Funktion vor der Schlüsselfreigabe nicht aufrufen möchte. Und auch Ctrl + Ein wird Text in Keydown nicht hervorheben, wenn es falsch zurückgibt.

+0

Was macht Steuerung + eine tun in Ihrem Browser? –

+0

es druckt den Text ... es bricht nicht von der Funktion – Vishnu

+0

"Keydown" löst vor 'keyup' richtig aus? –

Antwort

13

Tatsächlich stoppt die Funktion. Was Sie erleben, ist, dass zwei Key-up-Ereignisse ausgelöst werden: das von ctrl und das von A.

Die erste wird wie erwartet zurückgegeben, da sie die Anforderungen erfüllt: ctrlKey == true und .

Aber der zweite, wird es so nur eine Taste gedrückt werden beide Aussagen nicht wahr zusammen sein können:

  • Wenn Sie das letzte Mal die ctrl freigegeben, dann ist ctrlKey wahr, aber keyCode == 65 || keyCode == 97 ist nicht . Wenn Sie zuletzt A freigegeben haben, ist ctrlKey jetzt falsch.

Dann wird die Linie, die #status zu einer Fehlermeldung setzt ausgeführt wird.

+3

Dies ist die richtige Antwort. Ich hätte das gleiche geschrieben, aber Kaiido war schneller. – nalply

+1

ein Workaround wäre, eine Flagge zu verwenden: http://jsfiddle.net/f6rcgpmh/12/ – Kaiido

4

Eigentlich ist es nicht. Sie müssen Ihr Ereignis von 'keyup' zu 'keydown' ändern. Dann versuche es noch einmal. Sie können diese Geige überprüfen. http://jsfiddle.net/ebilgin/f6rcgpmh/5/


Wenn Sie die Kontrolle über die automatische Vervollständigung benötigen, müssen Sie Ihre Steuerelemente setzen, bevor die Daten gesendet werden.

Die Ctrl Taste Auslöser Ereignis verursacht Ihr Problem. Ich fügte hinzu, eine weitere Bedingung, um Ihren Code,

if (e.keyCode == 17) // Ctrl key, fires at Ctrl's keyup. 
    return false; 

Sie können meine neue Geige überprüfen, http://jsfiddle.net/ebilgin/f6rcgpmh/10/.

+0

Ich weiß, es funktioniert in Keydown..Ich brauche es für keyup..Grundsätzlich verwende ich AutoSearch in Textfeld und ich möchte nur nach keyup suchen. – Vishnu

+0

Wenn Sie Geige wie das vorbereiten, was Sie haben, kann ich mehr helfen. – ebilgin

+0

Überprüfen Sie es http://jsfiddle.net/f6rcgpmh/7/. Typ beliebige 1 Alphabet. – Vishnu

Verwandte Themen