我正在使用 jQuery Validation 插件来验证我网站上的表单。
http://docs.jquery.com/Plugins/Validation
我还使用以下代码为不支持 HTML5placeholder=""
属性的浏览器提供占位符支持。
// To detect native support for the HTML5 placeholder attribute
var fakeInput = document.createElement("input"),
placeHolderSupport = ("placeholder" in fakeInput);
// Applies placeholder attribute behavior in web browsers that don't support it
if (!placeHolderSupport) {
$('[placeholder]').focus(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
input.removeClass('placeholder');
}
}).blur(function() {
var input = $(this);
if (input.val() == '') {
input.addClass('placeholder');
input.val(input.attr('placeholder'));
}
}).blur().parents('form').submit(function() {
$(this).find('[placeholder]').each(function() { //line 20
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
}
});
});
}
当我提交表单时,会发生以下情况:
在支持该placeholder
属性的浏览器中,该validate()
函数会触发并且一切都按预期运行。
在不支持该placeholder
属性的浏览器中,第 20-25 行清除所有“占位符”,然后validate()
函数触发。如果没有错误,则页面提交并且一切正常。
在不受支持的浏览器中,如果出现错误,则会像往常一样应用相应的字段class="error"
——但占位符文本不会返回,直到blur()
事件发生在特定字段上。这会使这些字段留空——由于没有标签(只有placeholder
属性),用户只能猜测每个空字段应该包含什么,直到blur()
事件发生。
不受支持的浏览器的另一个问题是,由于占位符修复修改了value
属性以显示占位符,因此标记为必需的字段在它们应该失败时通过验证。
似乎没有简单的方法可以将验证插件与占位符支持代码一起使用。
我正在寻找修改占位符支持代码或将submitHandler: {}
函数作为参数添加到函数中,validate()
以使其在不受支持的浏览器中工作。