2013-08-08 10 views
0

사용자가 클릭하거나 입력 할 때 무언가를 토글하고자하는 상황에 있습니다. enter.두 이벤트 유형이 실행되지 않도록 방지

불행히도, 난 어딘가의 enter 키를 수신하고 그들이 enter의 keyup를받을 때 일부 항목에 .click()을 트리거하는 대규모 사이트에서 일하고 있어요. 나는 어디에서 찾을 수없는, 나는 싶지 않을 것이다 (또는 수) 내가 그것을 찾을 수있는 경우 변경하는 것이 아니라 그냥 같이 동작합니다

$("#item").on("keyup", function(event){ 
    if(event.keyCode == 13){$('#item').click();} 
}); 

결과는 나의 "토글"스크립트 사용자가 enter을 입력하면 자체 실행이 두 번 실행됩니다.

$('body').on('click keyup', '#item', function(e) { 
    console.log("-----------------"); 
    if(e.type=="click") { 
     console.log("Event Type: " + e.type); 
     //toggle something 
    } else { 
     console.log("Event Type: " + e.type+ ", keyCode: " + e.keyCode); 
     //toggle something 
    } 
}); 

(Here's a JSFiddle.)

사람이 입력에 도달 할 때 발사되는 모두 keyupclick을 방지 할 수있는 방법이 있습니까? 확실한 대답은 스크립트의 keyup 부분을 제거하는 것입니다. 그러나 [enter] -> [click] 스크립트가 보편적으로 적용되지 않기 때문에이 기능이 작동하지 않습니다. 따라서 enter 키가 필요합니다. 적용되지 않는 곳.

+1

당신은 제거 할 수 있습니다 이전 바인딩 (들)'.OFF를 사용하여() ' –

+0

질문에서 언급했듯이, 기존 바인딩을 변경하고 싶지는 않지만, 내가 변경할 수 없다고 말했을 때 틀렸다고 생각합니다. 나는 그것이 필요하다는 의미에서 단지 "불가능"합니다. – brentonstrine

+0

아 좋아, 나는 당신이 그들의 코드를 바꿀 수 없다고 생각했지만, 당신은 그 행동을 바꾸고 싶지 않다고 생각한다. –

답변

1

이벤트 네임 스페이스를 사용할 수 있습니다.

IE :

$(el).on('keyup:hamza', function(){ 
    //Detect if it was called by an element with event namespaced and do different code 
}) 

또한 ('의 keyup : 함자') 오프 사용할 수 있습니다 만 이벤트를 제거 ..