我目前已将我的文本区域绑定到几个似乎有效的事件。然而,问题是事件重叠并触发多次,这反过来又使性能降低了太多。
我想要做的几乎是捕获文本区域的任何更改:单击、粘贴、keyup、keydown、右键单击上下文菜单编辑(右键单击、剪切/删除/粘贴)、拖放等。这必须跨域工作- 浏览器至少低至 IE8。当您使用箭头键或类似键在文本区域中移动插入符号时,必须触发事件(我根据插入符号位置等处理更改)。
我不能使用任何重大延误。一旦您对文本区域执行某些操作,事件就必须立即触发并执行我在那里的任何代码。
我目前正在使用 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
}
});
如果有任何不清楚的地方,请询问,我会为您澄清:)