2013-04-10 3 views
0

다음 빌드를 위해 '올바른'방법을 찾으려고 애 쓰고 있습니다.jQuery - 단일 대 더블 클릭 - jEditable

제목이있는 td 셀이 있습니다 (큰 테이블에서). 이 td에는 하위 메뉴를 여는 click 이벤트가 있습니다. div 클래스로 래핑 된이 제목에 jEditable을 사용하여 인라인 편집을 구현했습니다.

단순화 :

<tr> 
.... 
    <td class="menuopener"><div class="editable">TITLE</div></td> 
... 
</tr> 

내가 DblClick에 jEditable을 triger하는 사업부 세트가 있습니다.

이 div가 전체 셀을 차지하므로 메뉴 푸시 클릭 이벤트가 발생하지 않습니다.

div를 display : inline으로 변경하면 셀의 '나머지'부분을 가져 와서 메뉴 열기 트리거를 사용할 수 있습니다.

하지만 두 번 클릭하면 메뉴가 열리지 않습니다. 사용자가 지금하려는 의도가 아니기 때문에 .... 그들은 제목을 업데이트하려고합니다.

이렇게하려면 '최선의 방법'이 필요합니다 ... 반드시 코드 위주는 아니지만 인간의 요인에 따라 다릅니다. 지연 추적기가 아이디어입니까? 메뉴를 두 번 클릭하고 단일 메뉴에서 편집하도록 변경하지만 같은 문제 만 뒤로 ..... .....

생각은?

+1

어쩌면 [this] (http://stackoverflow.com/questions/5471291/javascript-with-jquery-click-and-double-click-on-same-element-different-effect) 도움을 줄 수 있습니다. – Eich

답변

0

헤더의 크기에 관계없이 이벤트는 항상 거품으로 나타납니다. 제목 더블 클릭 리스너가 실행되면 메뉴 열기에 대한 클릭 리스너가 항상 두 번 먼저 실행됩니다. Demo.

클릭 대상이 귀하의 제목 인 경우 두 번 클릭에 대한 임계 값과 상관없이 메뉴 열기를 조절해야합니다. 당신이 참으로 판명 수 있습니다 클릭이 더블 클릭 할 경우 메뉴 오프너는 지연되는 기능을 활용하여 편집 inline-block을 할 수 있습니다 후자의 예에서

Demo

$('.menuopener').click(function(e) { 
    var delay = $(e.target).is('.editable') ? 200 : 0; 
    window.clearTimeout(window.openMenuTimeout); 
    window.openMenuTimeout = window.setTimeout(function() { 
     // your menu opener code 
    }, delay); 
}); 

$('.editable').dblclick(function(e) { 
    window.clearTimeout(window.openMenuTimeout); 
    // your editable code 
}); 
사실 .editable에 있습니다.

+0

감사! 나는이 개념을 많이 좋아한다. 하지만 편집 가능한 호출을 사용하여 두 번째 부분을 통합하는 방법을 잘 모르겠습니다. 요소 다음에 '.editable'명령 (click 또는 dblclick이있는 곳)을 사용하여 click 이벤트를 차단하고 시간 초과가 발생하기 전에 실행됩니다. 그 점에 대한 통찰력이 있으십니까? – briansol

+0

@briansol : 아, 플러그인으로 등록 된 편집 가능한 이벤트 리스너입니까? 글쎄, 플러그인이 자신의 코드에 후크하기위한 콜백을 제공한다고 확신한다. 편집 가능한 이벤트가 발생할 때 clearTimeout 호출이 이루어 지므로 메뉴 열기가 시작되지 않습니다. –

+0

예, jEditble은 플러그인이며 $ ('el')와 (과) 같이 호출됩니다. ({params ....}); – briansol