2015-08-10 12 views
19

Desidero rilevare il Controllo + A evento in ingresso. Posso trovare il Control + A evento, ma la funzione continua anche dopo return false.Rileva Ctrl + A in evento keyup

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>

voglio questo per lavorare in keyup non in keydown. Perché sto usando la ricerca automatica e non voglio chiamare la funzione prima del rilascio del codice. E anche Ctrl + A non evidenzierà il testo in keydown quando restituisce false.

+0

Che cosa fa il controllo + a nel browser? –

+0

stampa il testo ... non si stacca dalla funzione – Vishnu

+0

trigger 'keydown' prima di' keyup' giusto? –

risposta

13

In realtà la funzione si interrompe. Quello che stai vivendo è che si attivano due eventi keyup: quello da ctrl e quello da A.

Il primo restituisce come previsto perché soddisfa i requisiti: ctrlKey == true e keyCode == 65 || keyCode == 97.

Ma il secondo, ci saranno pressate in modo da entrambe le dichiarazioni non possono essere vere insieme un solo tasto:

  • Se ultimo rilasciato il ctrl, quindi ctrlKey è vero, ma non è keyCode == 65 || keyCode == 97 .

  • Se è stata rilasciata l'ultima volta A, quindi ctrlKey è ora falso.

Quindi viene eseguita la riga che imposta #status in un messaggio di errore.

+3

Questa è la risposta corretta. Avrei scritto la stessa cosa, ma Kaiido era più veloce. – nalply

+1

una soluzione alternativa sarebbe usare una bandiera: http://jsfiddle.net/f6rcgpmh/12/ – Kaiido

4

In realtà non lo è. Devi cambiare il tuo evento da 'keyup' a 'keydown'. Quindi prova di nuovo. Puoi controllare questo violino. http://jsfiddle.net/ebilgin/f6rcgpmh/5/


Se avete bisogno di controllo sulla funzione di completamento automatico, è necessario mettere i controlli prima di inviare i dati.

Il trigger di evento keylock Ctrl causa il problema. Ho aggiunto un'altra condizione per il codice,

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

È possibile controllare il mio nuovo violino, http://jsfiddle.net/ebilgin/f6rcgpmh/10/.

+0

So che funziona in keydown..io ne ho bisogno per la chiave. La ragione è che sto usando la ricerca automatica nella casella di testo e voglio cercare solo dopo la chiave. – Vishnu

+0

Se prepari il violino come quello che hai, posso aiutare di più. – ebilgin

+0

Dai un'occhiata a http://jsfiddle.net/f6rcgpmh/7/ .type qualsiasi 1 alfabeto. – Vishnu

Problemi correlati