document.onclick settimeout函数javascript帮助

时间:2010-06-15 18:32:20

标签: javascript settimeout

我有一个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。

5 个答案:

答案 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);
}