jQuery:带有必需select元素的HTML 5表单无效

时间:2011-10-19 02:35:25

标签: jquery html5 validation

如果浏览器支持模式属性$('select[required]').is(':invalid'),我一直在使用if(Modernizr.input.pattern) {},它在Firefox 4-7中运行正常,但Chrome和Safari都有问题。

所有其他验证工作正常,只需要选择菜单,即<select required><option></option></select>

这是我的jsfiddle:http://jsfiddle.net/mbCbt/。基本上,您选择一个下拉项,它意味着验证它。

在firefox中,选择'test'会说它有效。选择“请选择”将表示其无效。

在Safari / Chrome中,选择“测试”会显示无效,然后选择“请选择”会使其有效。再次选择测试将使其无效。从那里,选择test2,它将是VALID,然后再次选择test,这次它将是有效的。

我认为它是一个jQuery的东西,因为浏览器正在从CSS识别它的有效...

思考?我意识到这个函数没有任何官方支持(不是在jquery kb中),但我希望还有另一种解决方法。我已经降低了旧浏览器的验证检查,所以也许我应该回到webkit的那个?

1 个答案:

答案 0 :(得分:2)

在我看来像是一个Safari bug。验证器是正确的,但只是第二次调用它。当您调用is(':invalid')时,它将返回先前的验证。

我尝试了你的例子,并调用(this.validity()),但它返回相同的东西。只有CSS是准确的!

我很难理解如何轻松获得这个 - DOM不会返回CSS的值。我尝试检查$(this).css('border')和this.style.borderColor来获得结果,没有骰子。

<强>更新 在任何验证发生之前,change()事件都会触发。发出警报('这里');在你的.is前面(':无效');显示该元素仍然是无效CSS属性中的“红色”。

如果您在经过一段时间后尝试验证,请通过     window.setTimeout(doValidateTest(这个),10) 或者某些,那么它可能会正确返回。