【问题标题】:Jquery Validate remote rule and depends if input value changedJquery 验证远程规则并取决于输入值是否更改
【发布时间】:2015-07-24 11:05:28
【问题描述】:

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

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

只有在表单中更改了电子邮件地址的情况下,我才能调用远程方法。如果电子邮件保持不变,则无需验证。

这是一个适用于其他东西的远程方法的示例:

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

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

【问题讨论】:

  • 您可以将旧电子邮件地址存储在隐藏字段中,并在验证服务器端之前将其与文本框中的电子邮件进行比较。

标签: jquery jquery-validate


【解决方案1】:
  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. 将隐藏字段的valueremote 规则的depends 选项中email 字段的value 进行比较。

    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
    

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

【讨论】:

  • 只需在依赖返回条件中添加一个 not (!) 即可,它的效果非常好。 return !($(element).val() === $('#originalemail').val());
  • @RoyShoa,是的,逻辑是倒退的,但!== 就足够了。谢谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多