如何找出用户键入或粘贴到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.keyCode
。 keyCode==8
的问题是非英语键盘布局。我完全陷入糊涂的困境。
如果可能的话,我想知道textarea更改之前的值 - 也就是说,来自keydown事件。我不确定这是否可以用于粘贴。
(删除更容易 - 检测退格的keyCode==46
和del的selection.length > 0
。如果{{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,但这绝不是万无一失的,因为当用户使用“编辑”菜单或上下文粘贴时不会触发它浏览器中的菜单。