【问题标题】:what am I doing wrong in my setTimeout call? [duplicate]我在 setTimeout 调用中做错了什么? [复制]
【发布时间】:2020-11-27 15:30:26
【问题描述】:

我正在尝试编写一些显示文本的代码,然后在两秒钟后将其删除,但是 setTimeout() 方法似乎对我来说不能正常工作,被调用的函数正在运行,没有延迟.代码如下:

IDtext('IP-saved', "New IP Address saved successfully!");
setTimeout(IDtext('IP-saved', ""), 2000);

function IDtext(ID, text) {
    document.getElementById(ID).innerHTML = text;
}

我在这里做错了什么?

【问题讨论】:

  • 您必须将对函数的引用传递给setTimeout()。您的代码传递了调用函数的结果。
  • setTimeout(IDtext('IP-saved', "") 立即调用IDtext('IP-saved', ""),您需要一个函数,在调用时会调用 IDtext

标签: javascript html settimeout


【解决方案1】:

正确的语法是

setTimeout(IDtext, 2000, 'IP-saved', '');

被引用函数的参数必须放在最后

查看setTimeout()的文档

你的语法方式是
var timeoutID = scope.setTimeout(function[, delay, arg1, arg2, ...]);

【讨论】:

  • 哇,我从来不知道参数可以这样传递!我通常做setTimeout( IDtext.bind(this,'IP-saved', ''), 2000);
  • @JeremyThille 第一个参数是对您的函数的引用,而不是对您的函数的调用。
  • 是的,我知道。我没有调用该函数,而是将其绑定到当前上下文并将参数传递给它。
  • @JeremyThille 你也可以使用箭头函数来节省绑定使用
  • 我知道,但我更喜欢绑定语法
猜你喜欢
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2012-07-07
相关资源
最近更新 更多