또 다른 버전은 명확하고 단순하지만 시프트 된 capsLock을 처리하며 ASCII로 제한되지 않습니다.
document.onkeypress = function (e)
{
e = e || window.event;
if (e.charCode === 0 || e.ctrlKey || document.onkeypress.punctuation.indexOf(e.charCode) >= 0)
return;
var s = String.fromCharCode(e.charCode); // or e.keyCode for compatibility, but then have to handle MORE non-character keys
var s2 = e.shiftKey ? s.toUpperCase() : s.toLowerCase();
var capsLockOn = (s2 !== s);
document.getElementById('capslockWarning').style.display = capsLockOn ? '' : 'none';
}
document.onkeypress.punctuation = [33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,91,92,93,94,95,96,123,124,125,126];
편집 : capsLockOn의 감각은 doh, 수정되었습니다.
편집 # 2 : 이것을 좀 더 확인한 후에 불행히도 좀 더 자세한 코드를 약간 변경했지만 더 많은 작업을 적절하게 처리합니다.
e.keyCode 대신 e.charCode를 사용하고 0 값을 확인하면 지정된 언어 또는 문자 세트에 특정한 코드를 작성하지 않고 문자가 아닌 많은 키 누르기를 건너 뜁니다. 내 이해로는 약간 덜 호환 가능하므로 구형, 비 주류 또는 모바일 브라우저는이 코드가 예상하는 것처럼 작동하지 않을 수 있지만 어쨌든 내 상황에는 가치가 있습니다.
알려진 문장 부호 목록을 확인하면 코드 잠금에 의해 영향을받지 않기 때문에 잘못된 부정으로 표시되지 않습니다. 이를 사용하지 않으면 문장 부호 문자를 입력 할 때 대문자 잠금 표시기가 숨겨집니다. 포함 된 세트가 아닌 제외 된 세트를 지정하면 확장 문자와 더 호환 가능해야합니다. 이것은 가장 추악하고 특별한 casiest이며 비 서구 언어가 문장 부호 및 / 또는 구두점 코드가 문제가 될만큼 충분히 다른 가능성이 있지만 적어도 내 상황에서는 IMO의 가치가 있습니다.