2016-03-04 100 views
0

考虑这样的jsfiddle:https://jsfiddle.net/4ngsTrIb1DI5te5H/veqLhnmp/Safari浏览器9失败querySelectorAll有:无效的选择

它与required属性六大领域。使用jQuery我为change事件设置了一个事件处理程序,该事件向控制台写出需要多少所需的无效字段。它适用于除Safari之外的其他任何浏览器(或者我已经开始称之为新的IE6)。 Safari一半的时间返回错误的数字。

我该如何解决这个问题?我的最终目标是简单地要求jQuery告诉我容器元素中是否有无效的必需字段。

+0

你会在safari中发现任何控制台错误吗?或者只是不是预期的结果? – JanR

+0

没有控制台错误,只是不是预期的结果。 – Gup3rSuR4c

回答

0

好,感谢@ user2182349,我有一个想法,所以我修改了jQuery选择扩展:

$.extend($.expr[":"], { 
    invalid: function (
     element) { 
     return (element.validity && !element.validity.valid) || false; 
    } 
}); 

起初,它没有与选择元件工作,因为野生动物园落后背后的价值与所有其他尝试一样。但!当我在最后添加|| false时,它突然开始为选择元素(及时)工作。就我而言,我一直在寻找的功能(并花费了最近六个小时左右的时间来完成工作)终于可用,所以我称它为好。

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 

这种方法就不会被很可靠有多选,并且只对数据的存在进行检查并不是非常严格的验证。

+0

您给了我一个有承诺的想法,但现在唯一阻止它的事情是,在“change”事件中,Safari仍然会报告,即使存在选择元素,也没有选择选项。这就像它滞后于实际发生的事情。关于这个问题的任何提示? – Gup3rSuR4c

+0

您如何测试选择哪个选项? – user2182349

相关问题