jQuery键盘延迟事件
问题描述:
我想为jQuery创建特殊事件。我想进行控制延迟,当用户停止0.5秒时这将会起作用。但我不能使用setTimeout。jQuery键盘延迟事件
jQuery.event.special.keyupdelay = {
add : function(handler, data, namespaces) {
var delay = data && data.delay || 100;
return function(event) {
setTimeout(function() { handler.apply(this, arguments);}, data);
}
},
setup: function(data, namespaces) {
jQuery(this).bind("keyup", jQuery.event.special.keyupdelay.handler);
},
teardown: function(namespaces) {
jQuery(this).unbind("keyup", jQuery.event.special.keyupdelay.handler);
},
handler: function(event) {
event.type = "keyupdelay";
jQuery.event.handle.apply(this, arguments);
}
};
要使用这样的
$(".money").bind("keyupdelay", {delay: 1000}, function(event) {
alert('Delayed!');
});
的setTimeout不工作。
我可以把它像这样
var timer;
$(".quantity input").keyup(function() {
var self = $(this);
if(timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(function() {
var qty = self.val();
$(".qty").html(qty);
}, 300);
});
但我想创建特殊事件,这与延迟触发。我有很多控制需要延迟工作。
答
我猜测它可能是你在超时使用“this”:当延迟后运行函数时,“this”将是窗口对象。
jQuery.event.special.keyupdelay = {
add : function(handler, data, namespaces) {
var delay = data && data.delay || 100,
that = this;
return function(event) {
setTimeout(function() { handler.apply(that, arguments);}, data);
}
},
setup: function(data, namespaces) {
jQuery(this).bind("keyup", jQuery.event.special.keyupdelay.handler);
},
teardown: function(namespaces) {
jQuery(this).unbind("keyup", jQuery.event.special.keyupdelay.handler);
},
handler: function(event) {
event.type = "keyupdelay";
jQuery.event.handle.apply(this, arguments);
}
};
有什么问题吗? – 2010-02-26 14:00:33
什么防止setTimeout使用?可能有解决方法 – 2010-02-26 14:01:30