【发布时间】:2011-05-23 13:06:50
【问题描述】:
我正在使用 jQuery Validation 插件来验证我网站上的表单。
http://docs.jquery.com/Plugins/Validation
我还使用以下代码为不支持 HTML5 placeholder="" 属性的浏览器提供占位符支持。
// 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() 函数,以使其在不受支持的浏览器中工作。
【问题讨论】:
标签: javascript jquery html validation placeholder