2017-01-02 4 views
0

人々は私の言葉を誤解しているので、私はそれを書き直します。最後に起こった場合、私がjqueryで以下にコメントした関数を無視する"X"秒。 ここに私のコードです。x秒以内に発生した場合、関数を無視する

EDIT ::これを参考にして回答を書いてください。 "スクリプトはクラスの変更を無視し、遅延は機能しません" http://www.w3schools.com/code/tryit.asp?filename=FBC4LK96GO6H

自分自身を含むすべての人を混乱させて申し訳ありません。

+2

をフラグを確認することが可能重複を変更するsetTimeout()を使用することができますjQueryの5秒ごとの関数?](http://stackoverflow.com/questions/2170923/whats-the-easiest-way-to-call-a-function-every-5-seconds-in-jquery) –

+0

@ FabianSchultz私の質問に無関係。全然違う。 –

答えて

2

著者の投稿更新のため編集されました。

カスタムイベントを作成できます。この機能により、選択したオブジェクトの "delayedClick"イベントを定義します。

function delayedClickable(selector, delayTime){ 
    $(document).ready(function(){ 
    $(selector).each(function() { 
     var lastTimeFired = 0; 
     $(this).click(function(){ 
     if(Date.now() - delayTime > lastTimeFired) { 
      lastTimeFired = Date.now(); 
      $(this).trigger('delayedClick'); 
     } 
     }); 
    }); 
    }); 
} 

あなたがによって遅延時間と選択された要素でこのイベントを定義する必要があります思い出してくれる:

var delayTime = 3 * 1000; // 3 sec delay between firing action 
delayedClickable('.Img2', delayTime); 

そしてちょうど要素にあなたのイベントを使用します。例えば、イベントはそのように使用することができますクリックしてください:

$element.on('click', function() { 
    // ... 
}); 

そして、あなたのカスタムdelayedClickイベントがそのように使用する必要があります。

$element.on('delayedEvent', function() { 
    // ... 
}); 

全例: http://www.w3schools.com/code/tryit.asp?filename=FBC56VJ9JCA5


@更新 私はクリック機能を使い続けるために別のトリッキーな方法を見つけ、それが期待どおりに機能するようにします:

すべてです
function delayedClickable(selector, delayTime){ 
    $(document).ready(function(){ 
    $(selector).each(function() { 
     var scope = this; 
     $(this).click(function(){ 
     scope.style.pointerEvents = 'none'; 
     setTimeout(function() { 
      scope.style.pointerEvents = 'auto'; 
     }, delayTime); 
     }); 
    }); 
    }); 
} 

そして

var delayTime = 3 * 1000; // 3 sec delay between firing action 
delayedClickable('.Img2', delayTime); 

2番目の方法の鍵は、クリックしたときに要素のポインターイベントを無効にしてから、タイムアウト後にこれらのイベントを元に戻すことです。 https://developer.mozilla.org/en/docs/Web/CSS/pointer-events

とフル例: http://www.w3schools.com/code/tryit.asp?filename=FBC678H21H5F

+0

私はこれを私のコーディングでテストしてみましょうが、 "if"と "else if"に追加したときのテストではうまくいきました –

+0

'$(" element1 ")全体をラッピングしたいかもしれません。 ){...}}関数をthisとした場合(関数内にある場合はofcとします) これを試してください(以前はifで赤に切り替えるだけでしたが、赤は初期値なので、最初の例では2番目の遷移から青から赤までは遅れますが、コメントがあるので、あなたは青から赤に変わるのを遅らせたいと思っています)。これはすべてのクリックをカバーするバージョンです: http://codepen.io/anon/pen/LxPrGP –

+0

こんにちは私はこれで私のトラブルの一部を分かったと思います。元の投稿には書かれていませんでしたが、これはすべてスクリプトとして本体に追加されます。追加されたスクリプトは、繰り返しても無視されます。あなたが与えた元の答えで、あまりにも多くの質問をしなければ、それを私が体にどのように付加して機能させることができるか説明できますか? –

1

は、呼び出すための最も簡単な方法は何[フラグ変数との条件付きイベントハンドラで

var allowClick = true, 
    delaySeconds = 5; 
$(".element1").click(function(){ 
    if(!allowClick){ 
     return; // do nothing and don't proceed 
    } 
    allowClick = false; 
    setTimeout(function(){ 
     allowClick = true; 
    }, delaySeconds * 1000); 

    // other element operations 
}) 
+0

http://www.w3schools.com/code/tryit.asp?filename=FBC4LK96GO6Hこれで動作しますか? –

+0

なぜそれは...あなたは試しましたか? – charlietfl

+0

あなた自身を見て、私はかなり新しいjqueryと、あなたが私が持っている問題を参照してください、あなたは私がよく考えて理解するでしょう。私はそれを試みたが、私は大きな問題は、jquery内の何か他のものだと思う。 –

関連する問題