我目前已将我的 textarea 绑定到几个似乎有效的事件。但是,问题在于事件会重叠并触发多次,这反过来又会大大降低性能。
我想要做的是几乎捕捉到文本区域的任何更改:单击、粘贴、keyup、keydown、右键单击上下文菜单编辑(右键单击、剪切/删除/粘贴)、拖放等。这必须交叉-浏览器,至少到 IE8。当您使用箭头键或类似键在文本区域中移动插入符号时,必须触发事件(我根据插入符号位置处理更改等)。
我不能使用任何重大延迟。一旦你对 textarea 做了一些事情,事件必须立即触发并执行我在那里的任何代码。
我目前正在使用 jQuery 来绑定事件,但我可以使用纯 javascript 解决方案,只要它可以跨浏览器工作并执行我想要的操作。
这是我目前使用的代码:
var deadKeycodes = [16, 17, 18, 19, 20,
27, 33, 34, 35, 36,
38, 40, 44, //37 = left arrow and 39 = right arrow removed, it needs to trigger on those
45, 112, 113, 114, 115,
116, 117, 118, 119, 120,
121, 122, 123, 144, 145];
$(original).bind('propertychange keyup keydown input click', function(e) {
if (!Array.prototype.indexOf || deadKeycodes.indexOf(e.keyCode) == -1) { // prevent execution when pressing a 'dead' key
//do stuff here
}
});
如果有任何不清楚的地方,请询问,我会为您澄清:)