Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置超时不';行不通_Javascript_Css_Onclick - Fatal编程技术网

Javascript 设置超时不';行不通

Javascript 设置超时不';行不通,javascript,css,onclick,Javascript,Css,Onclick,我用display:none创建了一个id为“about”的div,并编写了以下脚本: function showbox() { document.getElementById('about').style.display="block" }; 并将该函数作为事件添加到另一个div: <div class="button" onClick="slide();setTimeout(showbox(),3000)">About</div> 关于 因此,当用户单击

我用display:none创建了一个id为“about”的div,并编写了以下脚本:

function showbox() {
    document.getElementById('about').style.display="block"
};
并将该函数作为事件添加到另一个div:

<div class="button" onClick="slide();setTimeout(showbox(),3000)">About</div>
关于
因此,当用户单击带有类“按钮”的div时,id为“about”的div将在3秒后出现,代码与显示部分一起工作,但不会延迟任何操作! 注意:函数slide()存在并且工作正常,它不会干扰任何东西,所以不要质疑它

请告诉我怎么了。
谢谢。

展示箱
就是您所需要的。删除
()

//您在这里*调用*showbox(),而不是将函数ref作为参数传递。
//用这个代替。
关于

更好的方法:分离关注点。内联javascript是一种糟糕的做法。只是我们一个事件监听器

var element; //grab element however you want
element.addEventListener("click",function() {
    slide();
    setTimeout(showbox,3000);
},false);

正如其他人所说,您需要向超时传递函数引用。让
()
立即调用函数。

设置超时(showbox,3000)
此处的括号
设置超时(showbox())…
立即调用函数。你不应该像那样使用内联javascript。我希望3秒计时器只是为了测试目的,因为它的设计很糟糕,让用户在3秒之前点击按钮,而不给出有目的的反馈。你为什么要这样使用代码注释呢?它就是这样出现的——我从什么时候开始使用的我确实会在我要传回给某人的真实代码中留下这样的注释。那么你应该使用
这毕竟是在HTML中;)-1来宣传内联JS事件。还有更好的解决方案,请教他们。另一方面,并非所有浏览器都支持addEventListener(与内联调用不同)。编辑:查看支持返回IE9的主题。对于8及以下版本,可以使用
attachEvent
。您也可以使用
element.onclick=function(){}
,但这只允许附加一个事件。@vdavid我确实将JavaScript作为日常工作之一来教授。我不同意。永远不要使用内联JS事件。@vdavid如果您确实需要这种兼容性,最好使用jQuery或类似的工具。否则你会经常碰到这种事情。浏览器已被弃用,因此新代码不应满足它们的需要。@NiettheDarkAbsol您没有听说过“关注点分离”,是吗?
var element; //grab element however you want
element.addEventListener("click",function() {
    slide();
    setTimeout(showbox,3000);
},false);