jQuery 验证 - 在焦点/按键上触发自定义'addMethod'



我为jQuery Validate创建了两个自定义验证方法。其中一个用于密码强度测试。我希望它在第一次集中输入时启动,这样它就可以在用户输入实时反馈时进行验证,而不仅仅是在表单提交时。

编辑:验证仅在表单提交时运行,我希望它在用户键入密码时运行,以便他们获得有关密码强度的实时反馈。

理想情况下,我只希望这种实时验证对选定的字段有效。也就是说,在提交表单之前,帐户电子邮件地址不应该这样,否则在他们完成输入之前,它会一直提醒他们地址无效。但是,如果它只能在应用于所有元素时工作,我会接受它用于此表单。

那么,在提交表单之前,是否可以在focus/keyup上调用jQueryValidate附加方法?

这是我要调用的新方法。

$.validator.addMethod('passwordStrength', function(password, element, param) {
// add our password test to
if (typeof zxcvbn === 'function') {
    var passwordMeter = $('#' + $(element).attr('id') + 'meter');
    var passwordMeterStrength = passwordMeter.find('.strength');
    var passwordMeterTrack = passwordMeter.find('.track');
    var passwordMeterBar = passwordMeterTrack.children();
    var strengthValues = ['Very weak', 'Weak', 'Average', 'Good', 'Strong'];
    //passwordMeter
    // get values of the other inputs in this form
    var otherinputs = [];
    if (param) {
        for (var input in param['user_inputs']) {
            // get the value and add it to an array
            otherinputs.push($(param['user_inputs'][input]).val());
        }
    }
    // run the test!
    var strength = testPasswordStrength(password, otherinputs);
    // show the strength of the password
    passwordMeterStrength.text(strengthValues[strength.score]);
    // change the class of our bar. nice browsers will animate this in CSS!
    passwordMeterBar.removeClass().addClass('bar strength' + strength.score);

    // we must be two or better
    if (strength.score > 1) {
        return true;
    } else {
        return false;
    }
} else {
    console.error('strength test is not loaded');
}
 }, '');

我最终将该方法的主要工作转移到一个由我的方法调用的单独函数中。然后我将函数绑定到密码输入。我选择了input事件,因为它在按键和更改时都会触发——它非常灵活,但经常被遗忘。

$.validator.addMethod('passwordStrength', function(password, element, param) {
    return passwordStrength(password, element, param);
}, '');
passwordEl.on('input', passwordStrength());

passwordStrength与我的问题相同。

最新更新