Как обрабатывать два события JavaScript? - PullRequest
1 голос
/ 18 мая 2011

Я пытаюсь выполнить проверку в поле пароля формы.Я вызываю функцию 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 проверяется и сообщается пользователю, а затем, когда заполненное поле заполнено и пользователь переходит к следующему полю, значение пароляпроверено.

1 Ответ

0 голосов
/ 18 мая 2011

Что ж, проблема в том, что вы используете окна оповещений для уведомления пользователя (плохая практика и надоедливый), в результате чего поле пароля теряет фокус.

Решение?Используйте логическое условие,

Вот пример jQuery (я очищаю ваш код), * ​​1005 *

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: Пропускает обнаружение колпачка, http://plugins.jquery.com/plugin-tags/caps-lock

РЕДАКТИРОВАТЬ: Отказ от очистки кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...