2012-11-08 4 views
9

に解雇、私はこのようなイベントを定義している:BACKBONE.JS - クリック、ダブルクリックイベントの両方が私のバックボーンビューで要素

events : { 
    'click .elm' : 'select', 
    'dblclick .elm' : 'toggle' 

}, 

select: function(e){ 
    e.preventDefault(); 
    console.log('single clicked'); 
} 

toggle : function(e){ 
    e.preventDefault(); 
    console.log('double clicked'); 
} 

私は同じ要素.elmにシングルとダブルクリックのイベントリスナーをバインドしています。私は、この要素をダブルクリックすると、私はこの出力を得る:

single clicked single clicked double clicked

preventDefault()stopImmediatePropagation()を試してみましたが、それは問題を解決していませんでした。

したがって、ダブルクリックするとシングルクリックイベントが発生しないようにするにはどうすればよいですか?

答えて

4

これは、Backbone自体の問題ではありません。 同じボタンでシングルクリックイベントとダブルクリックイベントの両方を処理する方法についてです。

  • Need to cancel click/mouseup events when double-click event detected

  • Javascript with jQuery: Click and double click on same element, different effect, one disables the other

  • 更新

      を参照してください:しかし、あなたはそれに対処する必要はありませんでした場合はそれが良いだろう。以下の mu is too short's answerを参照してください!

    0

    &トグルの最後にreturn false;を追加してみてください。

    6

    jQuery documentation、具体的に何をやっているしないことをお薦めします:

    同じ要素の両方clickdblclickイベントにハンドラをバインドすることはお勧めできません。トリガーされるイベントのシーケンスは、ブラウザーごとに異なります。dblclickの前に2つのclickイベントが受信されます。ダブルクリックの感度(ダブルクリックとして検出されるクリック間の最大時間)は、オペレーティングシステムやブラウザによって異なります。多くの場合、ユーザーが設定できます。

    あなたが見ていることは、まさに予想されることです(もちろんブラウザによって異なります)。あなたの問題を回避する唯一の方法は、タイマーを設定して、手動でシングルクリックとダブルクリックを区別することです。タイマーの値を調整し、さまざまなブラウザやオペレーティングシステムをチェックして、ほとんどの場所でうまく動作するような何かを得るまで、チェックする必要があります。

    代わりに1回のクリック操作で別々のコントロールを使用することを強くお勧めします。ダブルクリックはかなり不公平な期間であり、私たちはそれに慣れているので、それを我慢するだけです。

    +0

    hmm。アプリケーションの動作を変更する必要があります。 – Veera

    関連する問題