jQuery键控延迟事件
我正在尝试为jQuery创建特殊事件。我想使控制延迟,这将工作时,用户停止0.5秒。但是我不能使用setTimeoutjQuery键控延迟事件,jquery,delay,Jquery,Delay,我正在尝试为jQuery创建特殊事件。我想使控制延迟,这将工作时,用户停止0.5秒。但是我不能使用setTimeout jQuery.event.special.keyupdelay = { add : function(handler, data, namespaces) { var delay = data && data.delay || 100; return function(event) {
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!');
});
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);
});
设置超时不工作
我可以这样做
$(".money").bind("keyupdelay", {delay: 1000}, function( event ) {
alert('Delayed!');
});
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);
}
};
什么可以阻止setTimeout的使用?可能有一个解决办法