jQuery 验证自定义方法仅触发一次

问题描述 投票:0回答:1

我创建了一个自定义方法,可以根据两种情况远程检查返回不同消息的电子邮件的有效性。我只在第一次验证开始时工作,如果我再次更改输入值,结果仍然相同,就像该方法被忽略一样。

这是我的代码

var validateEmailMessage = '';
    jQuery.validator.addMethod("checkmail", function(value, element) {
        $.ajax({
            type: 'POST',
            url: '/join/check-email/',
            data: {email : value},
            success: function(data){
                var data = JSON.parse(data);
                if(data['response'] == 'ok'){
                    return true;
                }else{  
                    if(data['response'] == 'already'){
                        validateEmailMessage = 'This email has already been used';
                    }
                    if(data['response'] == 'notvalid'){
                        validateEmailMessage = 'This email is not valid';
                    }
                    return false;
                }
            }
        });
        
    }, function() { return validateEmailMessage });


$("#frm_join").validate({
            rules: {
                first_name: {
                    required: true,  
                },
                last_name: {
                    required: true,  
                },
                email: {
                    checkmail: true,
                    required: true,
                    email: true
                },
                pass:{
                    required: true,
                    alphaNumeric: true,
                    minlength: {
                        param: 8
                    }
                },
                pass_confirm: {
                    required: true,
                    minlength: {
                        param: 8
                    },
                    equalTo: {
                        param: "#pass"
                    }
                }
            },
            messages: { 
                ...
            },
            submitHandler: function(form) {
                ...
            }
        });


PHP 部分返回一个 json 响应,如 {"response": "ok"}

检查控制台,该方法被调用并每次返回正确的 true 或 false 响应,但输入与下面的错误消息保持相同或有效(取决于我第一次尝试的内容)

jquery-validate
1个回答
0
投票

我解决了完全改变方法,使用默认的远程选项,如下所示:

remote: {
        type: 'POST',
        url: '/join/check-email/', 
        dataType: 'json',
        data: {
            email: function () { return $('#email').val(); }
        },
        dataFilter: function(data) {
            var json = JSON.parse(data);
            if(json.response != 'ok') {
                return "\"" + json.response + "\"";
            } else {
                return true;
            }

        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.