3

我想在函数执行之前在 .click(function() {...}) 处理程序中编程延迟。这不起作用:

$('.okButton').click(setTimeout(function() { ...}, 3000))

它给出了这个错误(在 Chrome 中):

Uncaught TypeError: Object 2 has no method 'apply'

JQuery 文档没有提供任何关于为什么这不起作用的线索。

如何在执行函数处理程序之前延迟?

4

4 回答 4

7

它不起作用,因为setTimeout()不返回函数;它返回一个计时器句柄(一个数字)。

这应该有效:

$('.okButton').click(function() { setTimeout(function() { ...}, 3000); });

JavaScript 函数调用中的参数表达式总是在函数被调用之前被完全计算。您的代码称为setTimeout(),并且其中的返回值被传递到 jQuery 例程中。

于 2013-09-23T20:50:20.977 回答
2

解决方案是有一个 .click() 处理函数,它只调用 setTimeout() 并带有真正处理函数的句柄:

  $('.okButton').click(function() {
        setTimeout(okButtonClickHandler, 3000)
  });

当我尝试这个之前它立即调用处理函数,因为我在 setTimeout() 的参数上包含括号。

不要这样做:

  $('.okButton').click(function() {
        setTimeout(okButtonClickHandler(), 3000)
  });

它将立即执行处理函数。

于 2013-09-23T21:51:20.773 回答
1

为什么不将超时放在回调中?

$('.okButton').click(function() {

  setTimeout(function(){
    alert("Hello");
  },3000);

});
于 2013-09-23T20:53:18.890 回答
0

您可以执行以下操作:

$(".okbutton").click(function(event) {
    var timeout = setTimeout(function() {
        alert("Foo");
    }, 3000)
});

您可以试用工作示例。单击单词单击后,警报出现需要三秒钟。

于 2013-09-23T20:55:49.390 回答