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です(with 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

に電話する必要がありますwindow.setTimeout()

また、window.setTimeout()関数参照を取るため、 を引用符で囲む必要はありませんcheck。引用符を追加するeval()と、引用符で囲まれた文字列が処理されますが、これは遅く、不要です。

これはうまくいくはずです

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

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

それはうまくいくはずです...

于 2010-06-15T18:53:52.907 に答える