JQuery .click()处理程序无法接受函数周围的setTimeout()

时间:2013-09-23 20:49:46

标签: javascript jquery

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

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

它会出现此错误(在Chrome中):

Uncaught TypeError: Object 2 has no method 'apply'

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

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

4 个答案:

答案 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。单击单击单击后,警报将显示三秒钟。