2011-01-25 4 views
1

"shift key"keydown 및 keyup 이벤트에 대한 코드 스 니펫을 모질라에 작성했지만 예상대로 작동하지 않습니다. 코드 :addEventListener 및 attachEvent는 어떻게 작동합니까? Keydown 및 Keyup이 제대로 작동하지 않습니다.

<html> 
<head> 
<title>Testing Page</title> 
<script type="text/javascript"> 
var key_capslock = 0; 
var key_shift = 0; 

function print1(){ window.alert("shift status" + key_shift);} 
function print2(){ window.alert("shift status" + key_shift);} 
function keyset(evt){ 
    evt.preventDefault(); 
    if(evt.keyCode == 16){ 
    if(key_shift == 0){key_shift = 1; evt.stopPropagation();} 
    else {key_shift = 0; evt.stopPropagation();} 
    } 
print1(); 
return; 
} 
function keyrelease(evt){ 
    evt.preventDefault(); 
    if(evt.keyCode == 16){ 
     if(key_shift == 0){key_shift = 1; evt.stopPropagation();} 
     else {key_shift = 0; evt.stopPropagation();} 
    } 
print2(); 
return; 
} 

function init(){ 
document.body.setAttribute("contentEditable", true); 
document.body.addEventListener("keydown", keyset, false); 
document.body.addEventListener("keyup", keyrelease, false); 
} 
</script> 
</head> 
<body onload="init()"> 
<br> 
<body> 
</html> 

단계 : 1. 시프트 키 (를 keyDown와의 keyup 이벤트가 발생). 2. 경고는 교대 상태와 함께 제공됩니다 (print1 기능 실행). 나는 그것을 클릭한다. 예상 됨 : 경고는 교대 상태와 함께 제공되어야합니다 (print2 기능이 실행되어야 함). 실제 : print2 기능이 실행되지 않습니다.

Shift 키를 두 번째로 누르면 print2 기능이 실행됩니다. mozilla가 addEventListener 함수를 처리하는 방법을 이해할 수 없습니다. 누군가이 문제를 해결할 수 있도록 도와 줄 수 있습니까? 이 문제 (jquery, dojo 등)를 해결하기 위해 타사 프레임 워크를 사용하고 싶지 않습니다.

감사

답변

3

귀하의 코드는 실제로 괜찮지 만, 경고 메시지가 keyup을 검출에서 그것을 방지, 브라우저에서 초점을합니다. 당신이 사업부에 쓰기 기능을 변경하는 경우

, 예를 들어, 당신은 두 기능이 작동하는지 볼 수 있습니다 : 비록

http://jsfiddle.net/jtbowden/VqNvG/

, 나는이 코드를 이해하지 않습니다

if(key_shift == 0){key_shift = 1; evt.stopPropagation();} 
else {key_shift = 0; evt.stopPropagation();} 

keyset 인 경우 토글 링이 아닌 key_shift가 항상 1이어야합니다.

function keyset(evt){ 
    evt.preventDefault(); 
    if(evt.keyCode == 16){ 
    key_shift = 1; 
    evt.stopPropagation(); 
    } 
    print1(); 
    return; 
} 
function keyrelease(evt){ 
    evt.preventDefault(); 
    if(evt.keyCode == 16){ 
     key_shift = 0; 
     evt.stopPropagation(); 
    } 
    print2(); 
    return; 
}