2

我有一个正在用 ASP.Net MVC3 编写的移动应用程序(使用 JQuery 不显眼的验证)。作为其中的一部分,我正在收集用户的姓名和电子邮件信息。我的模型包括以下字段:

  [Required] public String Name {get; set;}
  [Required] public String Email {get; set;}

在我看来,我有以下形式的输入元素:

@Html.EditorFor(m => m.Name);
@Html.EditorFor(m => m.Email, "Email");

其中字符串编辑器模板和电子邮件编辑器模板是相同的,除了电子邮件模板明确将类型属性设置为“电子邮件”。

当我最初提交表单而不输入任何数据时,我会得到客户端验证,说明这两个字段都是必需的。当我开始在名称字段中输入时,验证警告立即消失。当我开始在电子邮件字段中输入时,验证仍然存在。

然后我可以单击提交,尽管“电子邮件字段是必需的”,但表单仍会正确提交。验证消息仍然可见。

如果我修改电子邮件编辑器模板以设置 type="text" 而不是 type="email",验证会清除我期望的方式(但移动用户不会获得电子邮件专用键盘)。

两个问题:(1)它为什么会这样?(2) 我怎样才能让它表现得“正确”(即,当输入电子邮件时,“必需的”验证消失了)?

4

1 回答 1

4

我认为您之所以会出现这种行为,是因为您使用的是旧版本的 jQuery 验证。从 1.9.0 开始的插件处理包括电子邮件在内的 HTML5 类型的输入元素的 keyup、聚焦和聚焦。MVC3 应用程序的标准模板带有 jquery validate 1.8.0,它不会。

所以你的答案:

  1. jQuery 验证版本 < 1.9.0 不处理 html 输入元素类型(例如 type=email)的 keyup、focusin 和 focusout 事件

  2. 升级您的 jquery-validate.js - 1.9.0 或更高版本

于 2013-01-28T15:38:09.170 回答