我有一个document.onclick函数,我希望有一个延迟。我似乎无法正确使用语法。
我的原始代码是
<script type="text/javascript">
document.onclick=check;
function check(e){do something}
我尝试了下面的内容,但是代码不正确,函数没有执行,也没有发生任何事情。
<script type="text/javascript">
document.onclick=setTimeout("check", 1000);
function check(e){do something}
我尝试了下一组,该功能已执行,但没有延迟。
<script type="text/javascript">
setTimeout(document.onclick=check, 1000);
function check(e){do something}
此代码的正确语法是什么。
TIA
编辑:
解决方案都很好,我的问题是我使用函数检查来获取被点击元素的id。但是在延迟之后,没有“记忆”被点击的内容,因此函数的其余部分不会被执行。 Jimr编写了短代码来保存点击事件。
正在运行的代码(在IE6中不起作用)
document.onclick = makeDelayedHandler( check, 1000 );
// Delay execution of event handler function "f" by "time" ms.
function makeDelayedHandler( f, time)
{
return function( e )
{
var ev = e || window.event;
setTimeout( function()
{
f( ev );
}, time );
};
}
function check(e){
var click = (e && e.target) || (event && event.srcElement);
.
.
.
谢谢大家。
更新:kennebec的解决方案适用于IE6。
答案 0 :(得分:4)
类似的东西:
document.onclick = function () {
setTimeout(check, 1000);
};
setTimeout
方法不返回函数,它返回一个数字,这是您可以使用的计时器ID,以防您在计时之前取消计时器(使用clearTimeout
) 答案 1 :(得分:2)
您可以创建一个通用函数来生成延迟事件处理程序。 E.g。
// Delay execution of event handler function "f" by "time" ms.
function makeDelayedHandler( f, time)
{
return function( e )
{
var ev = e || window.event;
setTimeout( function()
{
f( ev );
}, time );
};
}
function check( e )
{
// Your original handler
}
document.onclick = makeDelayedHandler( check, 1000 );
答案 2 :(得分:1)
window.twotimer=function(e){
if(arguments[1]!= 'timer'){
// If the 'timer' argument was not passed,
// the function was called from the event,
// so call it again with a timer
e= window.event || e;
var target= e.target || e.srcElement;
setTimeout(function(){return twotimer(target,'timer')},1000);
if(e.stopPropagation) e.stopPropagation();
e.cancelBubble=true;
return false;
}
// if you get to this point, e is the element node clicked
// a second ago-
// put your function body here, using e for the element clicked
alert(e.nodeName+' id='+ e.getAttribute('id')+'\nwas clicked a second ago');
}
document.onclick= twotimer;
答案 3 :(得分:0)
document.onclick = function() {
setTimeout("check()",1000);
};
function check() {
alert("I'm baaaaaack!");
}
这应该有用......
答案 4 :(得分:0)
您需要致电window.setTimeout()
。
此外,window.setTimeout()
采用函数引用,因此不需要check
周围的引号。添加引号会对引用的字符串执行eval()
,这很慢且不必要。
这应该有效
document.onclick = function(e) {
function check() {
return function() {
//do something
}
}
window.setTimeout(check, 1000);
}