2009-05-29 6 views
1

私は "この操作を行うのに3秒間待つ" <div>を実装しようとしています。キューに入れて、Javascriptのdiv内にクリックイベントを伝えるのをやめてください。

だから私は3秒(タイマーなどのイベント)でunclickableにしたいと思っていますが、何らかの形でキュー内のイベントをキャプチャしてから放火したいと思っている要素がたくさんあるので、<div>がありますそれらの期間(または私の選択のいくつかのイベント)が経過した/実行した後に?

私は、これはモーダルダイアログを表示して、それをクリック可能なものにしないなどの問題だと考えています。私はこれを考えていますか?

思考/アイデア?

答えて

0

divにonclick関数を与えます。これは、イベントの呼び出し配列を保持するだけで、最初の3秒間に開始します。そして、3000ミリ秒タイマーが終了したら、divのonclickを変更する関数を実行し、物事を編集できるようにし、イベントの配列を実行します。

0

私が助けになることがわかった別のものは機能です。

setTimeout("alert('hello')",1250); 

だから、限り、あなたが必要とするためにその呼び出しを格納する第二の方法で要素のonclickメソッドのすべてを囲むの線に沿って何か。

<div onclick=registerClick("normallyDoThis()")></div> 

は、その後、あなたは、セットアップ時のbegginingのタイマーが本部を変更し、すべてのコマンドを実行することができます。 evalコマンドを使用している可能性はありますか?

setTimeout("changeTheDiv()", 3000); 

function changeTheDiv() 
{ 
/*eval() all the items in a list of onclicks youve been storing up */ 
/*Then go through and parse out the register() from all the onclick methods*/ 
} 

は、私は、これは

1

一つの可能​​性はイベントがバブルアップとその子要素をクリックするあなたのDIVの応答のためのクリックハンドラを持つことがあるのに役立ちます願っています。遅延時間が経過するまで、そのハンドラはキューイングを実行します。大まかな例を示します(便宜上jQueryイベント処理を使用しています)。

(function() { 
    var isReady = false, queue = []; 

    setTimeout(function() { 
     isReady = true; 
     processQueue() 
    }, 3000); 

    $("#mainDiv").click(function(ev) { 
     if (isReady) { 
      //code to handle the click based on which child was clicked (ev.srcElement) 
     } else { 
      queue.push(ev.srcElement); 
     } 
    }); 

    function processQueue() { 
     var i, elem; 
     for (i = 0; elem = queue[i]; i++) { 
      $(elem).click(); //re-trigger the click event 
     } 
     queue.length = 0; 
    } 
})(); 
関連する問題