Debounce在IE9中不起作用

时间:2015-07-28 15:15:17

标签: angularjs internet-explorer-9 debouncing

我的网站目前使用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());
                });
            });
        }
    };
});

1 个答案:

答案 0 :(得分:0)

尝试了其他一些去抖api,但没有一个有效,所以我写了一个小的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
};

对不起,如果这很乱,我不得不从手机上写下来。