jQuery验证远程规则,并取决于输入值是否已更改

AdR*_*ock 4 jquery jquery-validate

我正在使用jQuery验证插件,并提出了我需要为其创建远程验证规则的方案。

假设我有一个成员表单,用户可以编辑其个人资料,其中包含其电子邮件地址和其他从数据库填充的信息。显然,我会使用远程方法进行检查,以检查在注册时不存在的电子邮件。问题出在用户不想更新其电子邮件地址,但在保存表单时,验证将大惊小怪,表明该电子邮件已经存在。

有没有一种方法可以仅在电子邮件地址已在表单中更改的情况下调用远程方法。如果电子邮件保持不变,则无需验证。

这是一个可用于其他用途的远程方法的示例:

rules: {
    something: {
        required: true,
        remote: {
            param: {
                url: '/path/to/file.php',
                type: 'post',
                data: {
                    'test': $('#something').val()
                }
            },
            depends: function() {
                return $('body').hasClass('someClass');
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我本以为我可以在检查更改的规则的依赖部分中进行一些检查,但我不知道该怎么做

Spa*_*rky 5

  1. value在加载页面时,将一个隐藏字段添加到表单中,并将其设置为数据库中的原始电子邮件地址。也给它一个id以后参考。(请注意,jQuery Validate插件默认情况下将忽略所有隐藏字段。它不会被验证,因此不需要name属性。

    <input type="hidden" value="foo@bar.com" id="originalemail" />
    
    Run Code Online (Sandbox Code Playgroud)

    您的电子邮件地址文本输入...

    <input type="text" value="foo@bar.com" name="emailaddress" />
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在规则选项中value,将隐藏字段的valueemail字段的比较。dependsremote

    rules: {
        emailaddress: {  // <- assumes 'name' of field is 'emailaddress'
            required: true,
            email: true,  // <- make sure data is a valid email address
            remote: {
                param: {
                    url: '/path/to/file.php',
                    type: 'post',
                    //data: // < do not need.  Value of 'emailaddress' is sent by default.
                },
                depends: function(element) {
                    // compare email address in form to hidden field
                    return ($(element).val() !== $('#originalemail').val());
                }
            } // close remote
        } // close emailaddress
    } // close rules
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,element传递给depends函数的参数表示该emailaddress字段。