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

JQuery .click() handler can't accept setTimeout() around the function

本文关键字:周围 setTimeout 函数 程序 click 处理 JQuery 不能接受      更新时间:2023-09-26

我想在执行函数之前在.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)
});

您可以尝试工作示例。单击单词单击后,需要三秒钟才能显示警报。