javascript textarea:什么是打字/粘贴,在哪里?

时间:2009-12-10 06:40:21

标签: javascript

如何找出用户键入或粘贴到textarea的内容?例如,如果他们在索引1处键入B(或β),或者他们在索引23处粘贴了hello world\n。我搜索了一下但找不到任何内容。这是我到目前为止使用的jQuery:

$("textarea").keydown(function(evt){
    var index= getCaret(this); // this.selectionStart doesn't work in IE
    var key = evt.keyCode; // Wrong.
}

getCaret查看event.keyCodekeyCode==8的问题是非英语键盘布局。我完全陷入糊涂的困境。

如果可能的话,我想知道textarea更改之前的值 - 也就是说,来自keydown事件。我不确定这是否可以用于粘贴。

(删除更容易 - 检测退格的keyCode==46和del的selection.length > 0。如果{{1}},则删除选择;否则删除之前或之后的字符。理论上。还有一种粘贴选择的情况。)

任何让任何一部分更接近在任何浏览器中工作的东西都非常感谢。那就是,你怎么知道:

  1. 键入字符的unicode字符串值?
  2. 何时发生粘贴?
  3. 粘贴的文字内容是什么?

1 个答案:

答案 0 :(得分:1)

我不太清楚你的最终目标是什么,所以很难提出建议。但是,这里有一些信息:

当用户键入一个字符时,使用keypress事件和(假设您的事件对象存储在一个名为evt的变量中)使用String.fromCharCode(evt.keyCode || evt.which)可以很容易地获取他们输入的内容。

对于粘贴,事情有点棘手。最简单的方法是在粘贴发生之前检测粘贴,存储textarea的值,并在很短的时间后(使用window.setTimeout)将新值与旧值进行比较。至于检测粘贴,很多浏览器现在都有paste事件:自版本5以来的IE,自版本3以来的Firefox和WebKit浏览器一段时间(不确定何时),因此您可以将它用于那些浏览器。作为其他浏览器的后备,您可以在keydown事件处理程序中检测Ctrl-V和Shift-Insert,但这绝不是万无一失的,因为当用户使用“编辑”菜单或上下文粘贴时不会触发它浏览器中的菜单。