为什么setTimeout()不起作用?

时间:2018-05-25 18:54:45

标签: javascript settimeout

我想让我的功能在运行前等待3秒钟。这似乎非常简单,但出于某种原因,我一直得到:

  

未定义slideFunction

控制台中出现

错误。如果我只是在不尝试使用setTimeout的情况下调用该函数,它就可以工作。这有什么不对?

window.onclick = slideFunction;

setTimeout(slideFunction, 3000); { 
  document.getElementById('#img3').style.marginLeft = "100px";
}

3 个答案:

答案 0 :(得分:1)

它可以工作,但是你要调用的函数需要被定义并成为一个函数。例如:

function slideFunction(){
  document.getElementById('img3').style.marginLeft = "100px";
}

document.body.onclick = () => setTimeout(slideFunction, 3000);
#img3 {
  width: 50%;
  border: 1px solid red;
  height: 100px;
  transition: margin-left .3s cubic-bezier(.4,0,.2,1);
}
body,html {height: 100%;margin: 0;}
<div id="img3"></div>
<button onclick="document.location.reload(true)">Reload</button>

一些问题:

  • .getElementById('#img3')不正确。它可以是.getElementById('img3').querySelector('#img3'),除非您的元素id真的是#img3,即:<img id="#img123" src>,在这种情况下它是无效的:
  

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。

  • window.onclick应为document.body.onclick

答案 1 :(得分:0)

您正在寻找的整个解决方案:

function slideFunction(){
  document.getElementById('#img3').style.marginLeft = "100px";
}
window.onclick = slideFunction;

setTimeout(slideFunction, 3000);

答案 2 :(得分:0)

感谢大家的帮助。我确实设法让我的工作如何使用

  function slideFunction(){
  document.getElementById('#img3').style.marginLeft = "100px";
  }

  document.body.onclick = () => setTimeout(slideFunction, 3000);
  }