简体   繁体   English

如何处理两个JavaScript事件?

[英]How to handle two javascript events?

I am trying to do some validation check to the password field a form. 我正在尝试对表单的密码字段进行一些验证检查。 I am calling a function onkeypress to check whether capsLock is on or off then onblur function check the password field value. 我正在调用函数onkeypress来检查capsLock是打开还是关闭,然后onblur函数检查密码字段值。 But as I enter any value in the password field, the onblur runs immediately along with onkeypress. 但是,当我在密码字段中输入任何值时,onblur和onkeypress一起立即运行。 This defeats my purpose of checking the capslock and then the field value. 这违背了我检查大写锁定然后检查字段值的目的。

HTML: HTML:

<input type="password" size=50 name="password" value="" onkeypress="checkCapsLock(event);" onblur="chkPsw(this.value);">

JavaScript: 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;
    }
}

I think I made myself clear. 我想我说得很清楚。 If any one can help me that would be great. 如果有人可以帮助我,那将是很好。

What I want is when someone starts typing in this password field the status of capsLock is checked and told to the user and then when the complete field is filled out and the user moves to next field, the password value is checked. 我想要的是,当有人开始在此密码字段中输入内容时,将检查capsLock的状态并告知用户,然后在填写完整字段并将用户移至下一个字段时,将检查密码值。

Well, the problem is that you're using alert boxes to notify the user (bad practice, and annoying) which results in the password field losing focus. 好吧,问题在于您正在使用警报框通知用户(错误做法和令人讨厌),这会导致密码字段失去焦点。

The solution? 解决方案? Use a boolean condition, 使用布尔条件,

Here's a jQuery example (I'm cleaning up your code), 这是一个jQuery示例(我正在清理您的代码),

jsFiddle: http://jsfiddle.net/MnMps/ 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: Props to capslock detection, http://plugins.jquery.com/plugin-tags/caps-lock PS: Capslock检测的建议, http //plugins.jquery.com/plugin-tags/caps-lock

EDIT: Gave up on cleaning up your code. 编辑:放弃清理代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM