我想在执行函数之前编写.click(function(){...})处理程序中的延迟。这不起作用:
$('.okButton').click(setTimeout(function() { ...}, 3000))
它会出现此错误(在Chrome中):
Uncaught TypeError: Object 2 has no method 'apply'
JQuery文档没有提供任何关于它为什么不起作用的线索。
如何在执行函数处理程序之前设置延迟?
答案 0 :(得分:7)
它不起作用,因为setTimeout()
没有返回函数;它返回一个计时器句柄(一个数字)。
这应该有效:
$('.okButton').click(function() { setTimeout(function() { ...}, 3000); });
在调用函数之前,始终对进行完整的JavaScript函数调用中的参数表达式计算。您的代码名为setTimeout()
,其返回值已传递到jQuery例程。
答案 1 :(得分:1)
为什么不将超时置于回调中?
$('.okButton').click(function() {
setTimeout(function(){
alert("Hello");
},3000);
});
答案 2 :(得分:1)
解决方案是使用.click()处理程序函数,该函数只使用真实处理程序函数的句柄调用setTimeout():
$('.okButton').click(function() {
setTimeout(okButtonClickHandler, 3000)
});
当我尝试这个之前它立即调用处理函数,因为我在setTimeout()的参数中包含括号。
不要这样做:
$('.okButton').click(function() {
setTimeout(okButtonClickHandler(), 3000)
});
它会立即执行处理函数。
答案 3 :(得分:0)
您可以执行以下操作:
$(".okbutton").click(function(event) {
var timeout = setTimeout(function() {
alert("Foo");
}, 3000)
});
您可以试用working example。单击单击单击后,警报将显示三秒钟。