2012-02-19 13 views
1

私はいくつかの機能を開始するためにjQueryの.clickイベントを使っているアンカーを持っています。 jQueryでダブルクリックやタイムアウトのクリックを無効にする方法は?

jQuery(document).ready(function(){ 
    jQuery('a.slide_circ').click(function(){ 
     do_all_functions(); 
     return false; 
    }); 
}); 

この

はそれが必要として働いて短い.. その内のコードで、すべてのdo_all_functionsを開始slide_circアンカークラスをクリックしてください。

しかし、そこに問題があります。ユーザーがダブルクリックをすると、2回以上の機能が実行されます。 そして、どのようにアイデアが地獄に行きますか?

私は何らかの方法でダブルクリックを無効にするか、自分の関数でタイムアウトを設定して毎回実行しないようにする必要があると思います。誰でも助けてくれますか?

+4

'どういう考え方が地獄に行くのですか? ' –

+1

クリックハンドラを一度しか動作させたくないのですか?または何?変数を設定しようとしましたか? –

+0

いいえクリック数と同じ回数何回も働きたいです。 しかし、ユーザーが速く2-3-4回クリックすると、これらのクリックをブロックします。 通常のクリック間隔は500msです。したがって、ユーザーが500msで2回以上クリックした場合、スクリプトは2-3-4ではなく、私の機能を1回だけ実行する必要があります。 – Svetoslav

答えて

4

.dataメソッドを使用して、要素に状態を割り当てます。

jQuery(document).ready(function() { 
    jQuery('a.slide_circ').click(function() { 
     var $this = jQuery(this); 
     if ($this.data('activated')) return false; // Pending, return 

     $this.data('activated', true); 
     setTimeout(function() { 
      $this.data('activated', false) 
     }, 500); // Freeze for 500ms 

     do_all_functions(); 
     return false; 
    }); 
}); 
+0

これは完璧です:) 同じタイムアウトを入れようとしましたが、間違いが1回ありました。 – Svetoslav

0

いくつかの方法がそれを行うには、しかし、1つの方法は次のとおりです:その後、状態をリセットするためにsetTimeoutを使用

jQuery(document).ready(function(){ 
    var do_all_functions_running = false; 
    jQuery('a.slide_circ').click(function(){ 
     if (!do_all_functions_running) { 
      do_all_functions_running = true; 
      do_all_functions(); 
      do_all_functions_running = false; 
     } 
     return false; 
    }); 
}); 

は完璧ではないが、それは動作します。

+1

ありがとうございます。これはうまくいきません。クリックイベントを設定すると、.click )、関数を実行しません。 – NicoSantangelo

+0

申し訳ありませんが、ロジックの配置が間違っています。 –

+0

このメソッドは '.unbind( 'click')'と同等です。これは関数が1回だけ実行されるようになり、再び実行されないためです。 –

0

あなたは実行の最後の日付を確認し、それが半分以下秒前だった場合は取り消すことができます。

jQuery(document).ready(function() { 
    jQuery('a.slide_circ').each(function() { 
     var lastRun = null; 

     $(this).click(function() { 
      if(lastRun && new Date() - lastRun < 500) { 
       // Less than 500ms; ignore. 
       return false; 
      } 

      // Set the last run: 
      lastRun = new Date().getTime(); 

      // Continue: 
      do_all_functions(); 
      return false; 
     }); 
    }); 
}); 

それはもう少し効率的であるという利点があります。

+0

複数の 'a.slide_circ'要素では動作しません。彼らはお互いに葛藤するだろう。 –

+0

@RobW:おっと、それを指摘してくれてありがとう!今修正されました。 – Ryan

関連する問題