Jquery验证远程规则并依赖于输入值是否已更改

时间:2015-05-13 08:58:05

标签: 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');
            }
        }
    }

我原本以为我可以检查一下检查更改的规则的依赖部分,但我不知道我会怎么做

2 个答案:

答案 0 :(得分:3)

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

    <input type="hidden" value="foo@bar.com" id="originalemail" />
    

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

    <input type="text" value="foo@bar.com" name="emailaddress" />
    
  2. 将隐藏字段的valuevalue规则的email选项中depends字段的remote进行比较。< / p>

    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
    

    请注意,传递到element函数的depends参数代表emailaddress字段。

答案 1 :(得分:0)

保存您的电子邮件,以便在初始验证后与全局变量进行比较,然后将其与depends中的当前值进行比较。

相关问题