Noch eine andere Version, klar und einfach, behandelt verschobene Feststelltasten und ist nicht auf ASCII beschränkt, denke ich:
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];
Bearbeiten: Sinn von capsLockOn wurde umgekehrt, doh, behoben.
Bearbeiten Nr. 2: Nachdem ich dies noch einmal überprüft habe, habe ich einige Änderungen vorgenommen, leider etwas detaillierteren Code, aber es werden mehr Aktionen entsprechend behandelt.
Wenn Sie e.charCode anstelle von e.keyCode verwenden und nach 0-Werten suchen, werden viele Tastendrücke ohne Zeichen übersprungen, ohne dass eine bestimmte Sprache oder ein bestimmter Zeichensatz codiert wird. Nach meinem Verständnis ist es etwas weniger kompatibel, sodass sich ältere, nicht zum Mainstream gehörende oder mobile Browser möglicherweise nicht so verhalten, wie dieser Code es erwartet, aber es lohnt sich für meine Situation trotzdem.
Durch die Überprüfung anhand einer Liste bekannter Interpunktionscodes wird verhindert, dass diese als falsch negativ angesehen werden, da sie nicht von der Feststelltaste betroffen sind. Ohne dies wird die Feststelltaste ausgeblendet, wenn Sie eines dieser Satzzeichen eingeben. Durch Angabe eines ausgeschlossenen Satzes anstelle eines eingeschlossenen Satzes sollte dieser besser mit erweiterten Zeichen kompatibel sein. Dies ist das hässlichste, speziellste Stück, und es besteht die Möglichkeit, dass nicht-westliche Sprachen genügend unterschiedliche Interpunktions- und / oder Interpunktionscodes haben, um ein Problem zu sein, aber es lohnt sich IMO, zumindest für meine Situation.