2012-07-08 39 views
13

当我们尝试提交HTML5表单时,如果一个或多个必填字段缺少值或其他一些错误(类型或长度不匹配),它将阻止表单提交。用户界面使用突出显示的无效字段进行更新,并重点关注第一个无效字段此外,有一个气球/气泡附加到第一个无效字段与错误消息。现在checkValidity更新UI

,如果一个Ajax的形式,我们称之为myForm.checkValidity()来调度Ajax调用之前确认错误。但是在调用checkValidity()时,它不会影响带有高亮显示的无效字段并附加了气泡的UI。

有没有办法来调用用于验证的浏览器自带的行为,所以我们可以看到气球无效字段一起强调,重点突出?

+0

OK,以及阅读W3C规范,你问什么,因为我认为这是一个以编程方式做到他们所谓的“交互验证约束”的一种形式。似乎没有任何API(反正是标准的)来做这件事。规范只是说它是由交互式“提交”元素触发的(如“提交”按钮)。 – Pointy 2012-07-08 16:15:44

+0

简答题:没有。 – robertc 2012-07-08 20:32:00

+1

[您是否可以使用JavaScript触发自定义HTML5表单错误?](http:// stackoverflow。com/questions/8597595/can-you-trigger-custom-html5-form-errors-with-javascript) – robertc 2012-07-08 20:34:44

回答

9

简单地触发一个实际的表单提交 - http://jsfiddle.net/tj_vantoll/ZN29S/

一个实际的表单提交将运行checkValidity,显示泡沫错误,请拨打必要invalid事件处理等

为了保证形式实际上并没有提交,你只需要一个submit事件处理程序附加到阻止默认操作的<form>,然后执行AJAX调用。

这是可行的,因为除非一个表格已经满足其所有约束(即具有有效数据),否则submit事件不会被触发。因此,对checkValidity的明确呼叫是不必要的。

编辑(12年11月7日)到地址意见。

通过在这种情况下,我只是指与一个提交按钮来完成非AJAX提交的实际表单提交。要显示原生气泡并将焦点更改为适当的表单元素,这是完成此操作的唯一方法。如果不存在提交按钮,则可以隐藏提交按钮并使用它来触发提交; it will still work

我会同意,这种做法是不理想的,但它在all supporting browsers工作。使用这种入侵的唯一原因而不是调用form.submit()是因为form.submit()不会触发本地验证。对我来说,这里的问题不是没有API来触发验证,而是调用form.submit()没有。该规范说,只要需要“用户代理静态验证表单元素表单的约束条件”,才会运行constraint validation。我不知道为什么拨打form.submit()不适用。

应该注意的是,checkValidity DOES会通过与本机表单提交相同的algorithm运行。因此,您可以免费使用turn off the default bubbles并实施您自己的。例如类似this

+0

如果你解释了你的意思是“触发一个实际的表单提交”,以及它与formEl.submit()有什么不同,那么这个答案会更好。此外,如果表单没有提交按钮,解决方案是什么? – Domenic 2012-11-06 04:08:20

+0

@Domenic,它是一个有趣的观点。我已经测试过FF16和IE10。似乎只有在点击提交按钮(用户或脚本)时才更新用户界面。我认为它必须调用相同的方法来验证'$('form')。submit()'它更新UI。 – 2012-11-06 06:00:05

+0

@Domenic是的,我写得很快,答案很快。我编辑希望解决您的意见。 – 2012-11-07 13:57:29