2011-12-21 5 views
2

jQuery를 사용하여 이벤트 처리기를 작성 중이며 클릭 및 두 번 클릭 이벤트에 대해 질문이 있습니다. 클래스 "파일"이있는 요소가 있습니다. 여기에는 두 개의 이벤트 핸들러가 연결되어 있는데, 하나는 요소를 한 번 클릭하고 다른 하나는 두 번 클릭하기위한 것입니다. 둘 다 서로 독립적으로 실행하고 싶었지만 두 번 클릭 이벤트가 발생하면 click 이벤트가 항상 발생합니다.이벤트 발생을 클릭하고 두 번 클릭

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

사용자가 이벤트가 첨부 된 항목을 두 번 클릭하면 정상적인 두 번 클릭 이벤트가 발생합니다. 그러나 클릭 한번만 발생하는 이벤트도 발생합니다. jQuery에서 두 번 클릭 이벤트가 발생하면 한 번의 클릭 이벤트가 항상 같은 요소에서 이미 시작되었다는 의미입니까?

+0

하고 멋지게 그것을 변경할 수있는 방법은 없습니다 : 대신 사용합니다. 한 번의 클릭만으로 어떻게 두 번 클릭 할 수 있습니까? –

+0

가능한 [단일 클릭 이벤트와 더블 클릭 이벤트를 구별하는 방법?] (http://stackoverflow.com/questions/5497073/how-to-differentiate-single-click-event-and-double-click-event) –

답변

4

제임스는 자신의 의견에서 언급했듯이 다른 하나도 없어도 될 수 없습니다. 해킹 약간있을거야,하지만 당신은 타이머와 독립적으로 이러한 작업을 할 수 있습니다 :

$('.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에서는 클릭 이벤트가 계속 발생합니다. –

관련 문제