我的页面上有一个HTML5表单,其中包含一个带有文本夹文本的电子邮件输入。它工作得很漂亮,我喜欢原生验证!
我不确定如何最好地提供旧浏览器。我正在使用一些javascript复制占位符的文本并将其作为值进行打印。它工作得很好,但随后表格验证会消失,因为表格中的文字不是电子邮件地址。
我不想失去验证..有什么想法吗?
HTML
<input id="email" type="email" placeholder="Enter your email address">
JavaScript(原型):
var Placeholder = Class.create({
initialize: function (element) {
this.element = element;
this.placeholder = element.readAttribute('placeholder');
this.blur();
Event.observe(this.element, 'focus', this.focus.bindAsEventListener(this));
Event.observe(this.element, 'blur', this.blur.bindAsEventListener(this));
},
focus: function () {
if (this.element.hasClassName('placeholder'))
this.element.clear().removeClassName('placeholder');
},
blur: function () {
if (this.element.value === '')
this.element.addClassName('placeholder').value = this.placeholder;
}
});
Event.observe(window, 'load', function(e){
new Placeholder($('email'));
});
编辑:
如果支持占位符的浏览器忽略了value属性,那会不会很好?
编辑2:
不,我不想将输入类型设置为文本。这会将验证的行为从电子邮件语法更改为拼写检查。
答案 0 :(得分:4)
用户Modernizr检测对占位符的支持,只有在支持不存在的情况下才使用您的javascript复制占位符文本:
if(!Modernizr.input.placeholder){
// copy placeholder text to input
}
这将阻止它在支持html5表单属性(如占位符)的浏览器上进行复制。
答案 1 :(得分:1)
试试这个:
<input type="email" value="Enter Email"
onfocus="if (this.value == 'Enter Email') {this.value = '';}"
onblur="if (this.value =='') {this.value = 'Enter Email';}" />
答案 2 :(得分:0)
我知道这是一个老问题,但它可以帮助遇到此问题的其他用户。
您可以使用此http://afarkas.github.com/webshim/demos/demos/webforms.html进行表单验证,并支持旧浏览器。它位于jQuery和Modernizer之上,非常容易实现。
希望它有所帮助。