考虑这个JSFiddle:https://jsfiddle.net/4ngsTrIb1DI5te5H/veqLhnmp/
它有六个具有required
属性的字段。使用jQuery我为change
事件设置了一个事件处理程序,该事件处理程序向控制台写出剩余多少个必需的无效字段。它可以在除Safari之外的其他浏览器中完美运行(或者我已经开始称之为新的IE6)。 Safari有一半的时间返回错误的数字。
我如何解决这个问题?我的最终目标是简单地让jQuery告诉我容器元素中是否存在无效的必填字段。
答案 0 :(得分:1)
Safari并不完全支持表单验证(参考:http://caniuse.com/#search=%3Ainvalid)
这不是一个完美的解决方案,但它可能有所帮助:
// All the elements which are required and lack a value attribute
var empties = $("[required] [value]").not();
// Count the number of selects
var selects = $("select").length;
// Count the number of selected options
var selected = $("option[selected]").length;
if (selected < selects) // One of the selects hasn't been selected
如果存在多重选择,这种方法将非常可靠,只检查数据是否存在非常严格的验证。
答案 1 :(得分:0)
好的,感谢@ user2182349,我有一个想法,所以我将我的jQuery选择器扩展修改为:
$.extend($.expr[":"], {
invalid: function (
element) {
return (element.validity && !element.validity.valid) || false;
}
});
起初它不能与select元素一起使用,因为Safari与所有其他尝试一样落后于值设置。但!当我在最后添加|| false
时,它也突然开始为选择元素工作(及时)。至于我担心我一直在寻找的功能(并且花了最后六个小时左右才能完成工作)终于可用了,所以我称它为好。