2

我有一个想要延迟的 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。

4

5 回答 5

4

就像是:

document.onclick = function () {
  setTimeout(check, 1000);
};
  • setTimeout方法不返回函数,它返回一个数字,这是您可以使用的计时器 ID,以防您想在计时器触发之前取消计时器(使用clearTimeout
  • 您不需要使用字符串作为第一个参数,使用函数引用。
于 2010-06-15T18:34:35.750 回答
2

您可以制作一个通用函数来制作延迟事件处理程序。例如

// 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 );
于 2010-06-15T20:58:34.367 回答
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;
于 2010-06-16T01:05:13.953 回答
0
document.onclick = function() {
    setTimeout("check()",1000);
};

function check() {
    alert("I'm baaaaaack!");
}

那应该工作...

于 2010-06-15T18:53:52.907 回答
0

你需要打电话window.setTimeout()

此外,window.setTimeout()需要一个函数引用,因此不需要在check. 添加引号会对eval()带引号的字符串执行 an 操作,这是缓慢且不必要的。

这应该工作

document.onclick = function(e) {
    function check() {
        return function() {
            //do something
        }
    }
    window.setTimeout(check, 1000);
}
于 2010-06-15T19:26:51.363 回答