अभी तक एक और संस्करण, स्पष्ट और सरल, शिफ्ट किए गए कैप्सलॉक को संभालता है, और ऐसा नहीं है कि मुझे लगता है कि असीसी को विवश किया गया है:
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];
संपादित करें: कैप्सलॉकऑन का सेंस उल्टा था, दोह, नियत।
# 2 संपादित करें: इसे कुछ और जाँचने के बाद, मैंने कुछ बदलाव किए हैं, दुर्भाग्य से थोड़ा और विस्तृत कोड है, लेकिन यह उचित रूप से अधिक कार्यों को संभालता है।
E.CCCode के बजाय e.charCode का उपयोग करना और 0 मानों की जाँच करना किसी दिए गए भाषा या वर्ण विशेष के लिए कुछ भी कोडिंग किए बिना, बहुत से गैर-चरित्र वाले कुंजीपटों को छोड़ देता है। मेरी समझ से, यह थोड़ा कम संगत है, इसलिए पुराने, गैर-मुख्यधारा या मोबाइल ब्राउज़र इस कोड की उम्मीद के अनुसार व्यवहार नहीं कर सकते हैं, लेकिन यह मेरी स्थिति के लिए वैसे भी है।
ज्ञात विराम चिह्नों की सूची के खिलाफ जाँच करने से उन्हें झूठी नकारात्मक के रूप में देखा जा सकता है, क्योंकि वे कैप लॉक से प्रभावित नहीं होते हैं। इसके बिना, कैप लॉक इंडिकेटर तब छिप जाता है जब आप उन विराम चिह्नों को टाइप करते हैं। एक शामिल किए गए के बजाय एक बहिष्कृत सेट को निर्दिष्ट करके, इसे विस्तारित वर्णों के साथ अधिक संगत होना चाहिए। यह सबसे बदसूरत, विशेष-कैसिएंट बिट है, और कुछ मौका है कि गैर-पश्चिमी भाषाओं में समस्या होने के लिए अलग-अलग विराम चिह्न और / या विराम चिह्न कोड हैं, लेकिन फिर से यह आईएमओ के लायक है, कम से कम मेरी स्थिति के लिए।