jQuery验证:由某个规则触发的回调?

Pet*_*ter 5 validation jquery jquery-plugins jquery-validate

我试图做到以下几点:我有一个与jQuery验证插件验证的一种形式.有一个领域有几个规则:

            var validator = $("#myForm").validate({ 
                rules: {
                    emailForRequest: { 
                        required: true, 
                        email: true,
                        remote: "'emailcheck.php"
                    } 
                } ,
...
Run Code Online (Sandbox Code Playgroud)

现在,当其中一个规则被破坏时,更确切地说是远程规则,我想触发一些额外的代码.因此,如果远程规则返回错误,并且它的错误标签出现在emailForRequest字段旁边,我需要一个回调,在后台执行其他一些操作.

简而言之:我可以看到哪个规则触发了错误,看到它是代码方式我的意思,并附加执行额外的功能吗?


编辑 好的,感谢Liam的回答和更好的阅读手册,我来到这里:

        rules: {
            emailForRequest: { 
                required: true, 
                email: true,
                remote: {
                    url: "'emailcheck.php" ,
                    type: "post" ,
                    complete: function(data){
                        if( data.responseText != "true" ) {
                            alert("Sorry mate, this email address was registered but never activated!");
                        }
                    }
                }
            } 
        } , ...
Run Code Online (Sandbox Code Playgroud)

但仍有一个问题.emailcheck.php脚本可以返回3个不同的结果,其中一个是真的,另外两个是依赖于语言的.所以我想发送一个json对象作为响应,其中包含错误类型的var(在所有语言中都相同)和带有消息的var(已转换).所以,在我的完整函数中,我可以检查错误类型并根据它做出响应.很容易,除了它会搞砸我应该出现在我的字段旁边的验证标准错误,我还没有找到解决方案.

小智 7

不确定这个线程是否仍然打开,但是我能够通过addMethod调用解决这个问题,并使用数组来跟踪该表单元素的错误消息.

这是代码

//phone
var phoneStatus = null;
$.validator
.addMethod(
    'validatePhone',
    function()
    {
        $.ajax({
            url: /path/to/script,
            async: false,
            dataType: 'json',
            data:{ formDataHere},
            success: function(data)
            {
                errorMessages['validatePhone'] = data.message;
                phoneStatus = data.status;
            },
            complete: function(){},
            error: function(){}
        });
        return phoneStatus;
    },
    function()
    {
        return errorMessages['validatePhone'];
    }
);
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 0

感谢 FreekOne 和他的前缀想法,我找到了一个可行的解决方案。我确实说可行,因为我对其清洁度不太满意。由于我不知道验证器中发生了什么,并且修改 dataFilter 和 ajax 调用的成功功能会扰乱验证器的正常工作,因此我得出了以下带有“隐藏”前缀的解决方案:

var validator = $("#myForm").validate({ 
                rules: {
                    emailForRequest: { 
                        required: true, 
                        email: true,
                        remote: {
                            url: "emailcheck.php" ,
                            type: "post" ,
                            complete: function(data){
                                if( data.responseText != true ) {
                                    if( data.responseText.search(/validationErrorTag/) > 0 &&
                                        data.responseText.search(/inactive/) > 0 ) {
                                         inactiveFunctionality();
                                    }
                                }
                            }
                        }
                    } 
                } ,...
Run Code Online (Sandbox Code Playgroud)

如果所有内容都检查完毕,则 emailcheck.php 返回 json 编码的 true 或 json 编码的错误消息,例如

<span class="validationErrorTag">inactive</span>This address is not yet activated.
Run Code Online (Sandbox Code Playgroud)

最后,我的 css 文件中有一个条目,以确保前缀不会显示:

.validationErrorTag {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

就像我说的,它有效,我现在将使用它,但使用隐藏的 html 前缀来识别错误消息对我来说似乎有点粗糙。因此,如果有人知道更好的解决方案,请告诉我。