2011-11-19 1 views
0

많은 텍스트 입력이있는 페이지가 있습니다. 모든 입력은 여러 가지 이유로 동일한 클래스를 공유합니다.동일한 클래스의 입력에서 키 코드 캡처

이제 입력이 집중되면 ESC 버튼을 캡처하고 입력 값이 있으면 경고를 표시하려고합니다.

이제 논리적으로 첫 번째 필드에서만 작동합니다. 첫 번째 필드 다음에 모든 입력이 같은 클래스를 공유하므로 ESC 버튼을 누르면 첫 번째 입력의 값이 제공됩니다.

그래서 내가 ESC를 누르고있는 두 번째, 다섯 번째 또는 다른 입력을 말하고 있다고 말할 수 있습니다. 여기

은 예이다 : http://jsfiddle.net/Y5e9W/

첫 번째 입력이 잘 작동, 제 2 입력 생각; ESC 키를 누르면 첫 번째 값이 표시됩니다.

답변

3

document이 아닌 클래스의 요소에 keyup 이벤트를 바인딩 할 수 있어야합니다. 그런 다음 this는 초점 요소를 참조합니다 :

$(".gp").keyup(function(e) { 
    if(e.which === 27) { 
     if(this.value.length > 0) { 
      //Has a value! 
     } 
     else { 
      //Empty! 
     } 
    } 
}); 

가 여기 updated fiddle입니다. jQuery는 keyCodecharCode 사이의 브라우저 차이를 처리하기 위해 노출하는 이벤트 객체의 which 속성을 사용했습니다.

: 당신이 document 수준에서이 문제를 처리해야하는 경우 의견에 따라

업데이트

, 당신은 포커스가 하나 .gp 요소의 선택을 좁힐 has 방법을 사용할 수 있습니다

if (gj.has(":focus").val() != 0) { //... 

여기에 another fiddle입니다.

+0

? 그것은 그 문서 keyup에 많은 것을 포함하는 전체 webapp입니다. – jQuerybeast

+0

가능해야하지만 이벤트 처리기를 요소 자체에 바인딩하는 것만 큼 효율적이지는 않습니다. 내 편집을보십시오 (내가 필요한 것을 이해했다고 가정하면 ...) –

+0

내 실제 문제를 발견했습니다. http://jsfiddle.net/kjcs3/ 내 입력에 자동 완성이 첨부되었습니다. jquery 자동 완성은 자체적으로 키 코드를 제공하므로 키 바인드가 제대로 작동하지 않습니다. 바이올린을 확인하십시오. – jQuerybeast

0

당신이 할 수있는 - 단지 'GP'클래스 요소의 keyup 이벤트에 응답 할 것이다

$(".gp").keyup(function (e) { 
    if ($(this).is(":focus") && (e.keyCode == 27)) { 
     if ($(this).val() != 0){ 
      alert('full'); 
       $(this).val(''); 
     }else{ 
      alert('empty');} 
    } 
}); 

를, 당신은 다음의 관련 요소에 액세스 할 수 this를 사용할 수 있습니다.

데모 - 그것은 문서의 keyup에 싸여 할 수는 없습니다 http://jsfiddle.net/uqS72/2/

+0

그것은 문서의 키를 수 없습니다? – jQuerybeast