【发布时间】:2014-09-08 14:39:54
【问题描述】:
我想消除导致 AJAX 调用的行表上的 keyup 事件。我已经使用了所有的去抖动插件,包括 Ben Alman 的 jQuery 插件,Underscore.js 的插件,jQuery delayed() 插件,以及 Filatov Dmitry 的插件,它扩展了 jQuery(如 Ben Alman 的)。
我的代码如下所示:
function onKeyUp(evt) {
doSomethingWith(evt, true);
}
$('#mytable').on('keyup', $.debounce(500, onKeyUp));
问题在于,虽然它在 Firefox 和 IE9 上运行良好,但在 IE8 上却无法运行。具体来说,当我调用 evt.preventDefault() 进入 jQuery 1.11.1 代码并在 e.returnValue = false; 的第 4967 行中断时,IE8 会引发“未找到成员”错误(因为 IE8 中显然不存在 preventDefault())。使用 IE 开发人员工具调试器检查事件变量后,似乎该变量包含所有事件成员方法和属性,但其中大部分都标记为“未找到成员”。
我已经尝试过这个解决方案https://stackoverflow.com/a/3533725/134120,但它不起作用。
谷歌搜索“找不到 IE 成员”会返回很多结果,但解决方案不多。
那么,有什么想法吗?
【问题讨论】:
-
嗯,在事件结束后很长时间阻止默认是没有意义的。如果您想取消活动,则需要以不同的方式处理。
-
它在 Firefox 和 IE9 中按预期工作,我成功使用 preventDefault() 来防止使用箭头键向下或向上滚动,这是默认行为。
-
为什么还要一个插件,这个自己做很容易-> jsfiddle.net/njeqmb0b
-
@AsGoodAsItGets:但是为了防止所有滚动事件你不会
debounce处理程序? -
所有的去抖插件基本上都使用超时,所以即使你通过它也无法阻止事件,因为它在超时触发时已经发生,请参阅我上面发布的小提琴。你必须防止默认的before你去抖动,你可以检查
e.which只防止箭头键。
标签: javascript jquery internet-explorer-8 dom-events