在IE8中将事件对象传递给去抖动函数

时间:2014-09-08 14:39:54

标签: javascript jquery javascript-events internet-explorer-8

我想在导致AJAX调用的行表上去掉一个keyup事件。我已经使用了所有的debouncing插件,包括Ben Alman的jQuery,来自Underscore.js的jQuery,一个jQuery delayed()插件,以及来自Filatov Dmitry的一个插件,它扩展了jQuery(就像Ben Alman的一样)。 / p>

我的代码如下所示:

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会抛出一个“未找到成员”错误(因为preventDefault()显然不存在于IE8)。在使用IE开发人员工具调试器检查事件变量时,似乎变量包含所有事件成员方法和属性,但大多数都标记为“未找到成员”。 我已经尝试过这个解决方案https://stackoverflow.com/a/3533725/134120,但它没有用。 谷歌搜索“未找到IE成员”返回了很多结果,但解决方案不多。

那么,有什么想法吗?

1 个答案:

答案 0 :(得分:2)

  

我需要先阻止默认处理程序(即不滚动),然后去抖动我的事件处理程序。

然后使用:

var onKeyUp = $.debounce(500, doSomethingWith);

$('#mytable').on('keyup', function(evt) {
    evt.preventDefault(); // do always
    onKeyUp(evt, true); // possibly bounced call to doSomethingWith
});