Namun versi lain, jelas dan sederhana, menangani capsLock bergeser, dan tidak terbatas pada ascii saya pikir:
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];
Sunting: Sense of capsLockOn dibalik, doh, diperbaiki.
Sunting # 2: Setelah memeriksa ini lagi, saya telah membuat beberapa perubahan, sedikit lebih detail kode sayangnya, tetapi menangani lebih banyak tindakan dengan tepat.
Menggunakan e.charCode alih-alih e.keyCode dan memeriksa nilai 0 melompati banyak penekanan tombol non-karakter, tanpa mengkode apa pun yang spesifik ke bahasa atau rangkaian karakter tertentu. Dari pemahaman saya, ini sedikit kurang kompatibel, jadi browser yang lebih tua, non-mainstream, atau mobile mungkin tidak berperilaku seperti yang diharapkan oleh kode ini, tetapi tetap sepadan, untuk situasi saya.
Memeriksa daftar kode tanda baca yang diketahui mencegahnya dilihat sebagai negatif palsu, karena tidak terpengaruh oleh caps lock. Tanpa ini, indikator caps lock disembunyikan ketika Anda mengetik karakter tanda baca mana pun. Dengan menentukan set yang dikecualikan, bukan yang termasuk, itu harus lebih kompatibel dengan karakter yang diperluas. Ini adalah bit yang paling jelek, paling khusus, dan ada beberapa kemungkinan bahwa bahasa non-Barat memiliki tanda baca dan / atau tanda baca yang cukup berbeda untuk menjadi masalah, tapi sekali lagi itu layak untuk IMO, setidaknya untuk situasi saya.