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