Debounce 在 IE9 中不起作用
Debounce does not work in IE9
我的网站目前使用 AngularJS v1.2.8 的去抖动指令。去抖在 FF 和 Chrome 中很好,但在 IE9 中不会发生延迟。我有严格要求支持 IE9,我无法升级到更新版本的 Angular。这段代码的哪一部分不兼容 IE9?或者,如果有已知的可以在 IE9 中使用的去抖动指令,我们将不胜感激。
当前去抖指令:
angular.module('stuff.debounce', []).directive('ngDebounce', function($timeout) {
return {
restrive: 'A',
require: 'ngModel',
priority: 99,
link: function(scope, elm, attr, ngModelCtrl) {
if(attr.type === 'radio' || attr.type === 'checkbox') return;
elm.unbind('input');
var debounce;
elm.bind('input', function() {
$timeout.cancel(debounce);
debounce = $timeout( function () {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
}, attr.ngDebounce || 1000);
});
elm.bind('blur', function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
});
}
};
});
尝试了一些其他的去抖动 api,但 none 它们的工作,所以我写了一些 javascript 在 IE9 中用于去抖动的方法。
var deb = undefined;
$scope.someMethod = function() {
if(deb !== undefined)
$timeout.cancel(deb);
deb = $timeout( function() {
//do stuff that you want debounced
deb = undefined;
}, 1500); //1500 is the debounce delay in ms
};
对不起,如果这很乱,我不得不从我的 phone 中写出来。
我的网站目前使用 AngularJS v1.2.8 的去抖动指令。去抖在 FF 和 Chrome 中很好,但在 IE9 中不会发生延迟。我有严格要求支持 IE9,我无法升级到更新版本的 Angular。这段代码的哪一部分不兼容 IE9?或者,如果有已知的可以在 IE9 中使用的去抖动指令,我们将不胜感激。
当前去抖指令:
angular.module('stuff.debounce', []).directive('ngDebounce', function($timeout) {
return {
restrive: 'A',
require: 'ngModel',
priority: 99,
link: function(scope, elm, attr, ngModelCtrl) {
if(attr.type === 'radio' || attr.type === 'checkbox') return;
elm.unbind('input');
var debounce;
elm.bind('input', function() {
$timeout.cancel(debounce);
debounce = $timeout( function () {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
}, attr.ngDebounce || 1000);
});
elm.bind('blur', function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
});
}
};
});
尝试了一些其他的去抖动 api,但 none 它们的工作,所以我写了一些 javascript 在 IE9 中用于去抖动的方法。
var deb = undefined;
$scope.someMethod = function() {
if(deb !== undefined)
$timeout.cancel(deb);
deb = $timeout( function() {
//do stuff that you want debounced
deb = undefined;
}, 1500); //1500 is the debounce delay in ms
};
对不起,如果这很乱,我不得不从我的 phone 中写出来。