在 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 > emailrules > urlfalse 应该可以解决问题...但显然不是?

您的 .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 应该做什么。

无论如何,您不能使用 .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 验证插件设置中为每个单独的字段分配规则。

这些自定义函数可以轻松扩展,因此如果您仍然需要,可以选择性地调用原始验证方法(例如,存储在变量中)。

干杯