在 jQuery 验证插件中,如何只验证必填字段是否为空,(没有语法验证)?
In jQuery Validate plugin, how to only validate required fields for being empty, (without syntax validation)?
由于真正的验证应该发生在服务器端,所以我希望 jQuery 只验证必填字段是否为空。所以我有这些默认值:
jQuery.validator.setDefaults({
rules: {
required: true,
email: false // Experimental, does nothing?
}
});
问题是 jQuery 验证插件仍然执行其他检查(如电子邮件语法),这与服务器端实现不同。如何关闭它们?
据我所知,他们的 documentation 设置属性如下:rules
> email
或 rules
> url
到 false 应该可以解决问题...但显然不是?
您的 .setDefaults()
方法中的对象字面量对该插件没有意义...
jQuery.validator.setDefaults({
rules: {
required: true,
email: false // Experimental, does nothing?
}
});
在使用 rules
选项时,您只能 将规则分配给各个字段...
rules: {
myFieldName: { // <- this was missing
required: true
}
}
email: false
// Experimental, does nothing?
我不太确定你认为 email: false
应该做什么。
email: true
表示该字段将被评估为有效的电子邮件地址
email: false
什么都不做,因为它实际上与此处省略 email
规则相同。否则只能disable the email
rule if it's set with an inline attribute.
无论如何,您不能使用 .setDefaults()
凌驾于 .validate()
已经实施的任何规则。如果您正在尝试 "remove" jQuery 验证已经通过任何其他方式实施的规则,您可以使用 the .rules('remove')
method.
但是,我质疑你的整个方法。为什么首先要分配 email
规则,然后才将其删除。 在您的情况下,没有显示足够的信息或代码来了解您在做什么或还有什么问题。
编辑:
通过评论,了解到正在使用 email
规则,因为该字段具有 HTML 5 属性 type="email"
,插件会自动拾取并分配 email
规则。
如果您不想使用 email
规则,则不能使用 type="email"
字段。使用 type="text"
并避免其他 HTML 5 个验证属性。
由于正如 Sparky 在他的回答中所述,在撰写本文时的最新版本 (1.13.1) 中 未实现 ,因此我想出了一个几行代码可以在记录的插件功能之外执行此操作。分享:
jQuery.validator.methods.email = function(){return true;}
jQuery.validator.methods.url = function(){return true;}
// Etc for each method you wish to disable
这段代码的作用是用始终 returns true
的自定义函数替换原始验证方法。这样 HTML5 属性可以保持完整,并且不需要在 jQuery 验证插件设置中为每个单独的字段分配规则。
这些自定义函数可以轻松扩展,因此如果您仍然需要,可以选择性地调用原始验证方法(例如,存储在变量中)。
干杯
由于真正的验证应该发生在服务器端,所以我希望 jQuery 只验证必填字段是否为空。所以我有这些默认值:
jQuery.validator.setDefaults({
rules: {
required: true,
email: false // Experimental, does nothing?
}
});
问题是 jQuery 验证插件仍然执行其他检查(如电子邮件语法),这与服务器端实现不同。如何关闭它们?
据我所知,他们的 documentation 设置属性如下:rules
> email
或 rules
> url
到 false 应该可以解决问题...但显然不是?
您的 .setDefaults()
方法中的对象字面量对该插件没有意义...
jQuery.validator.setDefaults({
rules: {
required: true,
email: false // Experimental, does nothing?
}
});
在使用 rules
选项时,您只能 将规则分配给各个字段...
rules: {
myFieldName: { // <- this was missing
required: true
}
}
email: false
// Experimental, does nothing?
我不太确定你认为 email: false
应该做什么。
email: true
表示该字段将被评估为有效的电子邮件地址email: false
什么都不做,因为它实际上与此处省略email
规则相同。否则只能disable theemail
rule if it's set with an inline attribute.
无论如何,您不能使用 .setDefaults()
凌驾于 .validate()
已经实施的任何规则。如果您正在尝试 "remove" jQuery 验证已经通过任何其他方式实施的规则,您可以使用 the .rules('remove')
method.
但是,我质疑你的整个方法。为什么首先要分配 email
规则,然后才将其删除。 在您的情况下,没有显示足够的信息或代码来了解您在做什么或还有什么问题。
编辑:
通过评论,了解到正在使用 email
规则,因为该字段具有 HTML 5 属性 type="email"
,插件会自动拾取并分配 email
规则。
如果您不想使用 email
规则,则不能使用 type="email"
字段。使用 type="text"
并避免其他 HTML 5 个验证属性。
由于正如 Sparky 在他的回答中所述,在撰写本文时的最新版本 (1.13.1) 中 未实现 ,因此我想出了一个几行代码可以在记录的插件功能之外执行此操作。分享:
jQuery.validator.methods.email = function(){return true;}
jQuery.validator.methods.url = function(){return true;}
// Etc for each method you wish to disable
这段代码的作用是用始终 returns true
的自定义函数替换原始验证方法。这样 HTML5 属性可以保持完整,并且不需要在 jQuery 验证插件设置中为每个单独的字段分配规则。
这些自定义函数可以轻松扩展,因此如果您仍然需要,可以选择性地调用原始验证方法(例如,存储在变量中)。
干杯