2016-02-24 10 views
5

Aby wykryć wejść naciśnij Używam prostego rozwiązania:nie wykrywa wejść naciśnij na telefon (textarea)

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

Na pulpicie działa właściwie wszędzie. Na tablecie, smartfonie - też - ale jeśli chodzi o textarea to nie działa.

Stało się to problemem od czasu kilku ostatnich aktualizacji chrome.

Tak więc, po naciśnięciu klawisza enter z telefonu komórkowego zobaczysz tylko nową linię "\ n", ale bez wykonywania funkcji.

Jak wykryć wejście na textarea na urządzeniach mobilnych w najnowszej wersji chrome?

Odpowiedz

1

Choć może to być Chrome konkretny błąd, te mogą być pewne możliwych soloutions:

  1. Sprawdź, e.which także:

    var key = e.which || e.keyCode || 0; 
    if (key == 13) { 
        // do something 
    } 
    
  2. Spróbuj innego zdarzenia: na przykład jeśli używasz keyUp, spróbuj keyPress


Jeśli to nadal nie działa, może być konieczne obejście, że jeśli wykrycie jest bardzo ważne. Możesz śledzić wartość i wykryć, gdy "\ n" zostanie dodane do obszaru tekstowego przy użyciu zdarzenia 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

Twój możliwe rozwiązanie nie były pomocne, ponieważ znalazłem się, że android klawiatura (czy to chrome wina, nie jestem pewien) nie emitują „keypress, keyDown” zdarzenia przy każdym „Press” to. Możesz czasami uzyskać "e.keyCode == 229", ale to już inna historia. Sztuczka z przetwarzaniem wartości działa dobrze, dzięki za opublikowanie kodu, o którym myślałem) –

Powiązane problemy