2011-03-20 6 views
4

에 상태를 잠금 감지, 나는 캡 키를 누르면 CAPSLOCK을 감지하는 방법을 발견했습니다. 그러나 키를 건드리지 않은 경우에도 대문자 상태를 알고 싶습니다.는 캡 페이지로드 (또는 유사) 내 연구에서

예 : 경고 (ui.Keyboard.capslock) // true 또는 false를 반환;

감사합니다.

+0

가능한 중복 [캡은 자바 스크립트를 사용하여에 잠금 여부를 어떻게 알 수 있습니까?] (http://stackoverflow.com/questions/348792/how-do-you-tell-if-caps-lock-is-on -using-javascript) –

+0

대문자 키 프레스 사용과 관련된 솔루션에 만족했던 포스터처럼 보입니다 (나는 그렇지 않습니다). 그래도 같은. – Jacksonkr

+0

우프 나는 사물의 모습으로 마이크 루이스처럼 "키를 건드리지 않은 경우조차도"를 완전히 놓쳤다. 이것이 가능한지 의심 스럽지만 다른 질문입니다. –

답변

1

아니, 당신은 페이지로드에 키보드 버튼의 상태를 얻을 수 없습니다. 당신은 keypress의 keyCode를 분석해야합니다. 그것이 유일한 방법입니다.

+0

그러면 구글과 야후가 어떻게 할 수 있는가? 메일 등의 로그인 폼을 살펴 본다면 ... 로드시 대문자 잠금을 감지 할 수 있습니까? – Corvusoft

+0

심각하게? URL을 보낼 수 있습니까? 해당 메시지에 대문자 잠금 메시지가 표시되지 않았지만 월요일과 일찍 나타났습니다. 다른 사람이이 스레드에서 나에게 가능하지 않다고 말했고, 그래서 지금 내가 매우 관심이 있어요. http://stackoverflow.com/questions/9060073/check-scroll-lock-num-lock-caps-lock-in-javascript-on-page-load/9060090#comment11387478_9060090 – MacGyver

+0

@BenCrowhurst ummm - 페이지로드시 표시되지 않습니다. (?) Google에서 아무 것도 찾을 수 없지만 야후에서는 코드를 사용하지 않고 "축소"할 수 있습니까? 더 의미있는 변수 이름을 사용하여 [이 페이지] (http://dougalmatthews.com/articles/2008/jul/)에 설명 된 솔루션과 매우 유사하게 보입니다. 2/javascript-detection-caps-lock /) (Mike Lewis의 답변에 링크 됨). –

1

난 그냥 뚜껑은 잠금 상태를 감지하고 캡 키는 경고가 켜져 있고 끌 수 있습니다 누르면 잠금 경우 있도록 저장됩니다 대안을 마련했습니다. 나는 chrome 45+와 ie9 +만을 코딩하고 있으므로, 이것이 당신의 계획이라면 일반적인 조정을해야 할 수도 있습니다.

여기 내 HTML입니다 :

<input type="text" id="pwd"> 
<p id="caps"></p> 

그리고 여기 JS을이다 : 나는 어떤 함수와 변수 전에 따라서 isDetectedcapsOnLOGINPAGE.CAPSdetect.에 대한 전역을 피하기 위해 네임 스페이스를 사용하고

var LOGINPAGE = LOGINPAGE || {}; 
LOGINPAGE.CAPSdetect = {}; 
$(function() { 
    LOGINPAGE.CAPSdetect.engage(); 
}); 

LOGINPAGE.CAPSdetect.isDetected = false; 
LOGINPAGE.CAPSdetect.capsOn = false; 

LOGINPAGE.CAPSdetect.engage = function() { 
    $('#pwd').on('keypress', LOGINPAGE.CAPSdetect.shiftDetect); 
    $(window).on('keydown', LOGINPAGE.CAPSdetect.capsDetect); 
} 

LOGINPAGE.CAPSdetect.shiftDetect = function(event) { 
    var caps = $('#caps'); 
    var which = event.keyCode; 
    var shift = event.shiftKey; 
    var targ = event.target; 
    if ((which >= 65 && which <= 90 && !shift) || (which >= 97 && which <= 122 && shift)) { 
     caps.html('CAPS LOCK IS ON').css('color', 'crimson'); 
     LOGINPAGE.CAPSdetect.isDetected = true; 
     LOGINPAGE.CAPSdetect.capsOn = true; 
    } else if((which >= 65 && which <= 90 && shift) || (which >= 97 && which <= 122 && !shift)){ 
     caps.html(''); 
    } 
} 

LOGINPAGE.CAPSdetect.capsDetect = function(event) { 
    if(event.keyCode === 20 && LOGINPAGE.CAPSdetect.isDetected) { 
     LOGINPAGE.CAPSdetect.capsOn = (LOGINPAGE.CAPSdetect.capsOn)? false:true; 
     if(LOGINPAGE.CAPSdetect.capsOn) { 
      $('#caps').html('CAPS LOCK IS ON'); 
     } else { 
      $('#caps').html(''); 
     } 
    } 
} 

. 네임 스페이스가 없거나 테스트하려면 this jsfiddle을 참조하십시오. 의

+0

내가 말할 수있는 한, 여전히 키가 눌려져 있기 때문에 OP의 질문에는 답할 수 없다. – zeeMonkeez

+0

아니요, OP의 질문에 대답하지 않습니다. 당신 말이 맞습니다. 누군가가 이미 '가능하지 않습니다'라고 대답했고 정확하다는 것을 알고있는만큼 OP를 OPEN에서 'NO WAY'로 남겨 두지 않고 'Hey pal, 일어날 수 없지만, 이걸 시도해 봐도 될까? ' 당신은 분명히 이것을 SO의 부적절한 사용이라고 생각합니다. 나는 사람들이 단순히 '예'또는 '아니오'라고 대답하는 것이 아니라 문제가있는 해결책을 찾기 위해 왜 여기에 오는 지 보려고합니다. 또한, 주요 언론에 의존하지 않는 솔루션을 가지고 있다면 게시하십시오! 생산성을 높이거나 게시하지 마십시오! – JoeMilo

관련 문제