[英]How to handle two javascript events?
我正在嘗試對表單的密碼字段進行一些驗證檢查。 我正在調用函數onkeypress
來檢查capsLock是打開還是關閉,然后onblur
函數檢查密碼字段值。 但是,當我在密碼字段中輸入任何值時,onblur和onkeypress一起立即運行。 這違背了我檢查大寫鎖定然后檢查字段值的目的。
HTML:
<input type="password" size=50 name="password" value="" onkeypress="checkCapsLock(event);" onblur="chkPsw(this.value);">
JavaScript:
function chkPsw(inpsw){
var psw = inpsw.toLowerCase(inpsw);
psw = trim(psw);
if (psw.length<4 || psw.length>15){
alert ('password length can be min. 4 and max. 15 chars' );
return false;
}
var p1=/^[a-z0-9_\-\!\@\$\%\&\(\)\{\}\[\]\<\>]+$/;/* a-z 0-9 _ - ! @ $ % & ( ) { } [ ] < > */
if(p1.test(psw)) {
alert("The password:::: "+psw+" :::: is ok.");
return true;
} else {
var p2 = /\s+/;
if (p2.test(psw)){
alert(psw+" is not ok. Space is not allowed.");
return false;
} else{
alert(psw+"\n is not ok only a-z 0-9 _ - ! @ $ % & ( ) { } [ ] < > ");
return false;
}
}
}
function checkCapsLock( e ) {
var myKeyCode=0;
var myShiftKey=false;
var myMsg='Caps Lock is On.\n\nTo prevent entering your password incorrectly,\nyou should press Caps Lock to turn it off.';
// Internet Explorer 4+
if ( document.all ) {
myKeyCode=e.keyCode;
myShiftKey=e.shiftKey;
}
if ( ( myKeyCode >= 65 && myKeyCode <= 90 ) && !myShiftKey ) {
alert( myMsg );
return false;
} else if ( ( myKeyCode >= 97 && myKeyCode <= 122 ) && myShiftKey ) {
alert( myMsg );
return false;
} else {
return true;
}
}
我想我說得很清楚。 如果有人可以幫助我,那將是很好。
我想要的是,當有人開始在此密碼字段中輸入內容時,將檢查capsLock的狀態並告知用戶,然后在填寫完整字段並將用戶移至下一個字段時,將檢查密碼值。
好吧,問題在於您正在使用警報框通知用戶(錯誤做法和令人討厭),這會導致密碼字段失去焦點。
解決方案? 使用布爾條件,
這是一個jQuery示例(我正在清理您的代碼),
jsFiddle: http : //jsfiddle.net/MnMps/
jQuery.fn.caps = function(cb){
return this.keypress(function(e){
var w = e.which ? e.which : (e.keyCode ? e.keyCode : -1);
var s = e.shiftKey ? e.shiftKey : (e.modifiers ? !!(e.modifiers & 4) : false);
var c = ((w >= 65 && w <= 90) && !s) || ((w >= 97 && w <= 122) && s);
cb.call(this, c);
});
};
var alerting = false;
$('#password').caps(function(caps){
if(caps){
alerting = true;
alert('Unintentional uppercase leads to wars!');
}
});
$('#password').blur(function() {
if(alerting == false && !this.value.match(/^[a-z0-9_\-\!\@\$\%\&\(\)\{\}\[\]\<\>]+$/)) {
alert("Abort! Invalid character detected!");
}
alerting = false;
});
PS: Capslock檢測的建議, http : //plugins.jquery.com/plugin-tags/caps-lock
編輯:放棄清理代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.