JQuery .click() 处理程序不能接受函数周围的 setTimeout()
JQuery .click() handler can't accept setTimeout() around the function
我想在执行函数之前在.click(function() {...})处理程序中编程延迟。 这不起作用:
$('.okButton').click(setTimeout(function() { ...}, 3000))
它给出了此错误(在Chrome中):
Uncaught TypeError: Object 2 has no method 'apply'
JQuery 文档没有给出任何关于为什么这不起作用的线索。
如何在执行函数处理程序之前设置延迟?
它不起作用,因为setTimeout()
不返回函数;它返回一个计时器句柄(一个数字)。
这应该有效:
$('.okButton').click(function() { setTimeout(function() { ...}, 3000); });
JavaScript 函数调用中的参数表达式始终在调用函数之前进行完全计算。你的代码调用了setTimeout()
,其返回值被传递到 jQuery 例程中。
解决方案是有一个 .click() 处理程序函数,它只调用 setTimeout() 和真正的处理程序函数的句柄:
$('.okButton').click(function() {
setTimeout(okButtonClickHandler, 3000)
});
当我在它立即调用处理程序函数之前尝试此操作时,因为我在 setTimeout() 的参数中包含括号。
别这样:
$('.okButton').click(function() {
setTimeout(okButtonClickHandler(), 3000)
});
它将立即执行处理程序函数。
为什么不把超时放在回调中?
$('.okButton').click(function() {
setTimeout(function(){
alert("Hello");
},3000);
});
您可以执行以下操作:
$(".okbutton").click(function(event) {
var timeout = setTimeout(function() {
alert("Foo");
}, 3000)
});
您可以尝试工作示例。单击单词单击后,需要三秒钟才能显示警报。
相关文章:
- setInteval vs setTimeout
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- setTimeout可以与闭包内的函数一起使用吗
- Javascript setTimeout for an array
- 刷新后,setTimeout将工作或不工作
- 继续使用javascript中的setTimeout
- setTimeout函数能否在其前面的代码执行之前激发
- jQuery setTimeOut: in for-loop
- SetTimeout and clearTimeout in Javascript
- 在setTimeout中调用相同的函数
- setTimeout不能太长
- Javascript-SetTimeout导致浏览器冻结
- setTimeout and V8
- 将jQuery对象传递到setTimeout递归函数中
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- 添加一个setTimeout方法会使jQuery悬停方法忽略setTimeout方法中的函数
- JS:setTimeout函数的UI计数
- JQuery .click() 处理程序不能接受函数周围的 setTimeout()
- 无用的setTimeout调用(参数周围缺少引号?)
- 错误:无用的setTimeout调用(参数周围缺少引号?)