我在写一个应用程序,我需要模拟一个textarea。我知道如何处理它的唯一方法是在关键事件中捕获keyCode。怎么会采取这个keyCode,并支持utf-8,将其应用于画布?Javascript HTML5捕获keyCode并写入画布
干杯
我在写一个应用程序,我需要模拟一个textarea。我知道如何处理它的唯一方法是在关键事件中捕获keyCode。怎么会采取这个keyCode,并支持utf-8,将其应用于画布?Javascript HTML5捕获keyCode并写入画布
干杯
这似乎是一个糟糕的主意,因为在文本输入方面有一个可怕的地方,textarea给你免费的(插入,选择,剪切,粘贴,拖放和箭头键处理等),但是这里就是你需要做两件事情:
<canvas>
属性tabindex
,以便它可以接收焦点,从而提高关键事件;<canvas>
元素添加keypress
(而不是)处理程序以捕获文本输入。代码:
<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>
使用jQuery:
<div id="myTextArea></div>
$('#myTextArea').keypress(function (event) {
$('#myTextArea').append(String.fromCharCode(event.which));
});
我认为你可能是对的,复制一个textarea似乎是一项可怕的工作,而我实际上并没有看到保留textarea的任何优点(它不是一个真正的应用程序,而更像是一个寓教于乐的游戏,发生在一个画布元素中,但需要接收文本输入)。我*想*把透明textarea放在我的画布上是最好的解决方案。 – 2010-09-16 18:29:25
虽然按键捕捉字符代码,但它不会捕捉退格。为什么使用keypress而不是keydown? – 2014-08-21 22:19:18
@DavidR .:我会使用'keydown'作为退格并删除支持。但是,为了收集文本输入,'keypress'是唯一的关键事件,它为您提供有关输入字符的数据,因此是唯一的选择。见http://unixpapa.com/js/key.html – 2014-08-21 22:35:48