2011-12-21 9 views
2

jQueryを使用してイベントハンドラを作成しています。クリックイベントとダブルクリックイベントについて質問がありました。私はそれにクラス "ファイル"を持つ要素を持っています。それには2つのイベントハンドラが付属しています.1つは要素をシングルクリックするためのもので、もう1つはダブルクリックのためのものです。私は両方とも、他のものとは独立して発射したかったのですが、クリックイベントは、ダブルクリックイベントが起きたときに必ず発生します。イベントの発生をクリックしてダブルクリックします。

$('.file').live('dblclick', function(//event handler code){}); 
$('.file').live('click', function(//event handler code){}); 

ユーザーがイベントを添付したアイテムをダブルクリックすると、ダブルクリックイベントが発生しますが、これは正常です。ただし、シングルクリックイベントが発生しているように見えます。 jQueryでは、ダブルクリックイベントが発生した場合、そのイベントは同じ要素に対して常に1回クリックイベントが発生していることを意味しますか?

+0

、そしてきれいにそれを変更する方法はありません。 代わりにこれを使用してください。シングルクリックがなければ、ダブルクリックはどうすればできますか? –

+0

[シングルクリックイベントとダブルクリックイベントを区別する方法は?](http://stackoverflow.com/questions/5497073/how-to-differentiate-single-click-event-and-double-click-event) –

答えて

4

Jamesは彼のコメントで言及しているように、他のものがなければ1つが存在しないことがあります。ハックのビットになるだろうが、あなたはタイマーで独立してこれらの仕事を持つことができます。

$('.file').live('dblclick', function() { 


    $(this).data('doubleClicked', true); 
    //event handler code 

}); 

function SingleClickHandle(this) 
{ 
    if (! $(this).data('doubleClicked')) 
    { 
    //event handler code 
    } 
} 

$('.file').live('click', function(){ 

    $(this).data('doubleClicked', false); 
    setTimeout('SingleClickHandler(this)', 500); // is half a second enough to consider it a double-click? 

}); 
+1

「スリープ」とは何ですか? –

+0

@ AndrewWhitakerのコメントに追加:これはPHPではありません! 'setTimeout'を使います。 –

+0

ああ、あまりにも速く書く。 –

-2

最初の回答を信頼しないでください。それは本当に悪いことです。はい

$('.file').on('click', function() 
{ 
    $(this).css('background', 'blue'); 
}); 

$('.file').on('dblclick', function(event){ 
    event.preventDefault(); 
    $(this).css('background', 'green');        
}); 

http://jsfiddle.net/H42KV/

+2

"本当に本当に悪い"ものが何であるか説明できるかもしれません... –

+1

少なくともChromeでは、ダブルクリックでクリックイベントが発生します。 –

関連する問題