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 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.