Я только что предложил альтернативу, которая будет определять состояние блокировки заглавных букв и сохранять их так, чтобы при нажатии клавиши блокировки заглавных букв предупреждение можно было включать и выключать.Я пишу только для Chrome 45+ и ie9 +, поэтому могут потребоваться некоторые корректировки для общего использования, если это ваш план.
Вот мой HTML:
<input type="text" id="pwd">
<p id="caps"></p>
А вот js:
var LOGINPAGE = LOGINPAGE || {};
LOGINPAGE.CAPSdetect = {};
$(function() {
LOGINPAGE.CAPSdetect.engage();
});
LOGINPAGE.CAPSdetect.isDetected = false;
LOGINPAGE.CAPSdetect.capsOn = false;
LOGINPAGE.CAPSdetect.engage = function() {
$('#pwd').on('keypress', LOGINPAGE.CAPSdetect.shiftDetect);
$(window).on('keydown', LOGINPAGE.CAPSdetect.capsDetect);
}
LOGINPAGE.CAPSdetect.shiftDetect = function(event) {
var caps = $('#caps');
var which = event.keyCode;
var shift = event.shiftKey;
var targ = event.target;
if ((which >= 65 && which <= 90 && !shift) || (which >= 97 && which <= 122 && shift)) {
caps.html('CAPS LOCK IS ON').css('color', 'crimson');
LOGINPAGE.CAPSdetect.isDetected = true;
LOGINPAGE.CAPSdetect.capsOn = true;
} else if((which >= 65 && which <= 90 && shift) || (which >= 97 && which <= 122 && !shift)){
caps.html('');
}
}
LOGINPAGE.CAPSdetect.capsDetect = function(event) {
if(event.keyCode === 20 && LOGINPAGE.CAPSdetect.isDetected) {
LOGINPAGE.CAPSdetect.capsOn = (LOGINPAGE.CAPSdetect.capsOn)? false:true;
if(LOGINPAGE.CAPSdetect.capsOn) {
$('#caps').html('CAPS LOCK IS ON');
} else {
$('#caps').html('');
}
}
}
Я использую пространства имен, чтобы избежать глобальных переменных для isDetected
и capsOn
, следовательноLOGINPAGE.CAPSdetect.
перед некоторыми функциями и переменными.См. this jsfiddle для отсутствия пространства имен и проверки его.