所以...,答案是您的任何 JS 代码都不会触发,因为 Chrome 正在实现 HTML5 输入元素,包括表单验证。因此,除非您正确填写字段,否则您的验证代码将永远不会触发!
在 HTML5 中,required 属性是一个布尔值,它要么是真要么是假。根据the spec,浏览器应该在问题字段上触发invalid 事件。如果需要,您可以在此时取消默认阻止行为。但是,您的脚本在您尝试attr('required') 时再次崩溃。它将使用 HTML5 在 Chrome 中返回 true 或 false,而不是您期望的 email 之类的值。
所以如果你想让它工作,你需要添加这两个部分:
$(":input").bind("invalid", function(e){
e.preventDefault(); // Don't block the form submit
});
然后从
重构您的代码
var a = $(this).attr('required');
成为
var a = $(this).attr('required') ? $(this).attr('type') : "";
并根据需要更改您的 switch 语句以匹配
最后一个想法:您也可以采用一种非常酷的方法(也称为特征检测),然后改为:
用这个包裹你当前的validate:函数内部:
if(typeof $('<input />')[0].checkValidity === "undefined") {
... existing code ..
} else {
$(':input').bind('invalid', function(){
$(this).addClass('error');
}).blur(function(){
// If valid, turn off error
// If invalid, turn on error
$(this).toggleClass('error', !this.checkValidity());
});
}
Here is a demo 表示将在 Chrome 中运行的第二个版本,并且可能是 Opera 的当前/测试版。