为什么我的timeOut函数被调用两次?

时间:2014-09-09 10:14:22

标签: jquery jquery-plugins settimeout

我创建了下一个插件。它具有超时功能,非常简单。当我使用插件时,回调函数被调用两次,有人可以解释为什么吗?

@EDIT:好的,这只有在我打字很快的时候才会发生。这就像cearTimeout被调用到很晚了,timeOuts就会堆积起来。

// Create closure.
(function ($) {

    // Plugin definition.
    $.fn.autoUpdate = function (options) {
        var parameters = $.extend({}, $.fn.autoUpdate.defaults, options);

        // traverse all nodes
        this.each(function () {
            var timeOut = null;
            $(this).bind("keyup", function () {
                timeOut = setTimeout(function () {
                    parameters.callBack.call(this);
                }, parameters.timeOut);
            });
            $(this).bind("keydown", function () {
                clearTimeout(timeOut);
            });

            // allow jQuery chaining
            return this;
        })
    };

    // Private function for debugging.
    function debug(obj) {
        if (window.console && window.console.log) {
            window.console.log(obj);
        }
    };

    $.fn.autoUpdate.defaults = {
        timeOut: 2000,
        callBack: function () {
            debug('callback called');
        }
    };

// End of closure.

})(jQuery);
HTML中的

<script type="text/javascript">
  $(function () {
    $('#email-address').autoUpdate({
      timeOut: 2000,
      callBack: function () {
        console.log('email');
      }
    });

    $('#password').autoUpdate({
      timeOut: 2000,
      callBack: function () {
        console.log('password');
      }
    });
  });
</script>

0 个答案:

没有答案