Wydaje się to złym pomysłem, ponieważ jest dużo ponad dane wejściowe tekstu, które daje tekst za darmo (ostrożność, wybór, wycinanie, wklejanie, przeciąganie i upuszczanie, obsługa klawiszy strzałek itp.), Ale oto dwie rzeczy, które trzeba zrobić:
- Daj
<canvas>
atrybut tabindex
tak, że może on otrzymać ostrość, a tym samym podniesienie kluczowych zdarzeń;
- Dodaj element obsługi
keypress
(nie keydown
) do elementu <canvas>
w celu przechwycenia wprowadzania tekstu.
Kod:
<canvas id="textarea" tabindex="1" width="300" height="200"></canvas>
<script type="text/javascript">
var el = document.getElementById("textarea");
el.onkeypress = function(evt) {
var charCode = evt.which;
var charStr = String.fromCharCode(charCode);
alert(charStr);
};
</script>
Myślę, że możesz mieć rację, wygląda na to, że bardzo dużo pracy polega na skopiowaniu textarea i nie widzę żadnych korzyści z utrzymywania textarea (to nie jest tak naprawdę aplikacja, ale bardziej gra z edutainmentem, w której wszystko jest dzieje się w elemencie canvas, ale trzeba odebrać wpis tekstowy). Myślę, że * umieszczenie przezroczystego tekstu na moim płótnie jest najlepszym możliwym rozwiązaniem. –
Podczas gdy naciśnięcie klawisza przechwytuje kody znaków, nie powoduje przechwycenia tylnych pól. Dlaczego warto używać keypown zamiast keydown? –
@ Davav: Użyłbym 'keydown' dla backspace i usunięcia wsparcia. Jednak w celu zbierania danych wejściowych 'keypress' jest jedynym kluczowym zdarzeniem, które daje dane o wpisywanych znakach, więc jest jedynym wyborem. Zobacz http://unixpapa.com/js/key.html –