Yine başka bir sürüm, açık ve basit, kaydırılmış capsLock ele ve sanırım ascii ile sınırlı değil:
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];
Düzenleme: capsLockOn duygusu ters, doh, düzeltildi.
Edit # 2: Bu biraz daha kontrol ettikten sonra, ne yazık ki biraz değişiklik, biraz daha ayrıntılı bir kod yaptım, ancak daha fazla eylem uygun şekilde işler.
E.keyCode yerine e.charCode kullanılması ve 0 değerlerinin kontrol edilmesi, belirli bir dile veya karakter kümesine özel bir şey kodlamadan, karakter olmayan birçok tuşa basmayı atlar. Anladığım kadarıyla, biraz daha az uyumlu, bu yüzden daha eski, ana akım olmayan veya mobil tarayıcılar bu kodun beklediği gibi davranmayabilir, ancak yine de durumum için buna değer.
Bilinen noktalama kodları listesine karşı kontrol etmek, bunların büyük harf negatifinden etkilenmediği için yanlış negatif olarak görülmelerini engeller. Bu olmadan, bu noktalama işaretlerinden herhangi birini yazdığınızda büyük harf kilidi göstergesi gizlenir. Dahil edilen bir küme yerine hariç tutulan bir küme belirterek, genişletilmiş karakterlerle daha uyumlu olmalıdır. Bu, en çirkin, en özel-en küçük bit ve Batılı olmayan dillerin bir sorun olacak kadar farklı noktalama ve / veya noktalama kodlarına sahip olma şansı var, ama yine de IMO'ya değer, en azından durumum için.