2013-03-10 8 views
2

다음 코드를 시도하고 있습니다. 컨텍스트 메뉴 이벤트 후 Keyup 이벤트가 등록되지 않았습니다.

<!DOCTYPE html> 
<html> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> 
</script> 
<script> 
$(document).ready(function(){ 
$(document).on("keyup","body",function(e) { 
    if (e.which == 16) { 
    $("input").attr("sh","0"); 
    } 
}); 

$(document).on("keydown","body",function(e) { 
    if (e.which == 16) { 
    $("input").attr("sh","1"); 
    } 
}); 
}); 
</script> 
</head> 
<body> 
<input type = 'text' sh = '0'/> 
<p>Just checking</p> 
</body> 
</html> 

이 이벤트의 시퀀스가 ​​실행되는 경우를 제외하고는 잘 작동

을 발표 할 때이 shift 키를 누를 때마다 1로 입력의 sh 속성을 변경하고 다시 0으로 복귀 할 예정이다. 입력에 초점이 맞지 않는 동안 Shift 키를 누릅니다. (Firebug는 예상대로 sh이 1이됨을 보여줍니다). 이제 키를 누른 상태에서 입력에 집중하십시오. 이제 입력을 마우스 오른쪽 버튼으로 클릭하십시오. 컨텍스트 메뉴가 나타납니다. 이제 shift 키를 놓으면 (컨텍스트 메뉴를 그대로 둡니다) 방화 광은 sh이 여전히 1임을 보여줍니다. 이동하려면 컨텍스트 메뉴 바깥을 클릭하거나 paste 옵션을 클릭하여 클립 보드 텍스트를 입력에 붙여 넣으십시오 (여전히 sh). 1. shift을 다시 눌렀다가 놓으면 sh 만 다시 0이됩니다.

어떻게 해결할 수 있습니까?

+0

모든 '문서'또는 '입력'에서 '교대'키를 확인해야합니까? "body"대신 –

+0

을 입력하고 "*"을 입력하십시오. 희망이 도움이 될 것입니다. –

+0

@KundanSinghChouhan, 운이 없다,'*'를 사용하면 여전히 1이다! – SexyBeast

답변

0

다음 내용이 도움이 되나요? 시나리오를 올바르게 시뮬레이트하지 못했지만 나를 위해 일하는 것 같습니다. 크롬에서 테스트했습니다.

$ (문서) .ready (함수() {

$(document).keyup(function (e) { 
    if (e.which == 16) { 
     $("input").attr("sh", "0"); 
     console.log($("input").attr("sh")); 
    } 
}); 

$(document).keydown(function (e) { 
    if (e.which == 16) { 
     $("input").attr("sh", "1"); 
     console.log($("input").attr("sh")); 
    } 
}); 

//Works... (holding shift will raise keydown as much as I hold the key...) 
//$(document).keyup(function (e) { 
// if (e.keyCode == 16) { 
//  console.log("Shift was released..."); 
// } 
//}); 

//$(document).keydown(function (e) { 
// if (e.keyCode == 16) { 
//  console.log("Shift was pressed down..."); 
// } 
//}); 

});