2012-12-09 3 views
0

목록 항목을 클릭 한 다음 백 스페이스 키를 눌러 삭제할 수 있습니다. jQuery로 어떻게하면 좋을까요? 내가 목록 항목에 키 누르기 이벤트를 첨부 할 수 없습니다처럼jQuery - 백 스페이스 키 누르기 이벤트가있는 목록 항목을 삭제 하시겠습니까?

http://jsfiddle.net/prRVc/

가 보이는 :

$('<li>Click Me</li>') 
.appendTo('#list') 
.click(function(){ 
    $(this).addClass('delete'); 
    $(this).focus(); // doesn't seem to do anything maybe?? 
}) 
.keypress(function(e){ 
    // this event handler doesn't fire 
    var key = (e.keyCode ? e.keyCode : e.which); 
    if (key === 8) { 
     if ($(this).hasClass('delete')) 
      $(this).remove(); 
    } 
}); 

여기 내 jsfiddle입니다.

+0

목록 항목을 포커스로 지정할 수 없습니다. 당신이해야 할 일은 키 누르기 이벤트를 윈도우처럼 포커스를 얻을 수있는 것으로 묶는 것입니다. – Ohgodwhy

+0

조금 더 실제적이기 때문에 Stack Exchange의 태그 입력과 비슷한 태그 입력을 만들고 있습니다. 텍스트 입력이 있습니다. 사용자가 백 스페이스 키를 누른 후 텍스트 필드에 아무 것도 없으면 목록의 마지막 태그에 삭제 클래스를 추가합니다. 또한 태그를 클릭하고 백 스페이스를 클릭 할 수 있기를 원합니다. – Redtopia

답변

1

당신은 문서 수준의 키 핸들러를 가지고 시도해야합니다 : 당신은 이 다른 솔루션을 사용해보십시오 "삭제"클래스와 문서의 키 및 프로세스 목록에 대한 별도의 핸들러를 작성 :) 아무것도 얻을 수 없습니다. 또한 'keypress'대신 'keydown'을 사용하는 것이 더 안전합니다. 실행 예 : http://jsfiddle.net/DwX4e/

+0

예, 본질적으로 @Akhil Sekharan과 같은 대답입니다. 내가 만든 유일한 추가 사항은 keycode가 처리 될 때 false를 반환하는 것이며, 이는 해당 클래스가있는 목록 요소가 발견 된 경우에만 수행됩니다. false를 반환하지 않으면 브라우저는 하나의 기록 항목으로 돌아갑니다. – Redtopia

+0

나는 당신이 keypress를 사용할 수 없기 때문에 당신의 대답을 올바른 것으로 만들었습니다 ... 당신은 keydown을 사용해야합니다. Chrome에서 $ (문서) .keypress()를 인식하지 못합니다 ... 다른 브라우저에서도 마찬가지라고 생각되지만 확실하지 않습니다. – Redtopia

3

목록 요소에 포커스를 사용할 수 없습니다.

$(document).keypress(function(e){ 
    var key = (e.keyCode ? e.keyCode : e.which); 
    if (key === 8) { 
     $('li.delete').remove(); 
    } 
}); 
+0

문서가 백 스페이스 이벤트를 캡처하지 않는다고 생각합니다. –

+0

** 오류 : ** 예상 ')'및 끝에 세미콜론이 없습니다. –

+0

Chrome에서 키 누르기가 작동하지 않기 때문에 keypress()가 아닌 $ (document) .keydown()이되어야합니다. 또한 이벤트를 처리하면 전파되지 않으므로 false를 반환하려고합니다. 전파되면 브라우저는 백 스페이스를 1 기록 항목으로 되 돌리는 것으로 해석합니다. – Redtopia

관련 문제