2016-02-24 4 views
5

Per rilevare entrare stampa sto usando soluzione semplice:non può rilevare entrare stampa sul cellulare (textarea)

if (e.keyCode == 13) { 
    // do something 
} 

Sul tavolo funziona correttamente ovunque. Anche su tablet, smartphone - ma, se si tratta di textarea, questo non funziona.

È diventato un problema da pochi ultimi aggiornamenti di Chrome.

Quindi, quando si preme Invio dal cellulare si vede solo la nuova riga "\ n", ma nessuna esecuzione della funzione.

Quindi, come rilevare l'immissione nella textarea sui dispositivi mobili nell'ultima versione di Chrome?

risposta

1

Mentre può essere un bug specifico Chrome, quelli potrebbero essere alcuni possibili soloutions:

  1. verificare la presenza di e.which così:

    var key = e.which || e.keyCode || 0; 
    if (key == 13) { 
        // do something 
    } 
    
  2. Prova un evento diverso: per esempio se si sta utilizzando keyUp, provare keyPress


Se questo ancora non funziona potrebbe essere necessario un workaround per questo, se il rilevamento è importante. Puoi tenere traccia del valore e rilevare una volta che "\ n" viene aggiunto alla textarea utilizzando l'evento input.

var textarea = document.getElementById('your-textarea'); 
var textareaValue = textarea.value; 
var textareaLines = getLines(textareaValue); 

function getLines(str) { 
    // This uses RegEx to match new lines. 
    // We use || [] because it would otherwise fail if there weren't 
    // any line breaks yet. 

    return (str.match(/[\n\r]/g) || []).length; 
} 

textarea.addEventListener('input', function() { 
    var newValue = textarea.value; 
    var newLines = getLines(newValue); 

    if (newLines > textareaLines 
     && newValue.length == textareaValue.length + 1) { 

     // We also check that the new length is only one 
     // character longer to not fire this new line event 
     // after a copy-paste with a new line character. 

     doSomething(); 
    } 

    textareaValue = newValue; 
    textareaLines = newLines; 
}, false); 
+1

tua soluzione possibile non erano disponibili, perché ho scoperto che la tastiera Android (o è colpa di cromo, non è sicuro) non emettono "di pressione dei tasti, keydown" eventi ogni volta che si "stampa" di esso. È possibile ottenere "e.keyCode == 229" a volte, ma questa è un'altra storia. Il trucco con un'elaborazione del valore funziona bene, grazie per aver pubblicato il codice a cui stavo pensando) –