HTML5的placeholder 属性的向下兼容

HTML5的placeholder 属性的向下兼容

更多 0

placeholder属性是HTML5新添加的属性,当input或者textarea设置了该属性后,该值的内容将作为灰色提示显示在文本框中,当文本框获得焦点时,提示文字消失,placeholder可作为输入框的提示文案,如图所示登录框:

系统登录

其实以前是通过给input|textarea设置value值来实现类似功能的,当input|textarea获得焦点时,将其value设置为空。但是有一个问题是对于密码输入框:

<input type=”password”>

如 果再用设置value值的方法,密码输入框中的值将被黑点替代。使用placeholder则可以解决这个问题,目前支持placeholder的浏览器 为:Firefox4.0+、Chrome4.0+、Safari4.0+,Opera 11、IE9。对不支持的浏览器我们将使用模拟的placeholder属性的替代方法:

具体思路是:

1,首先判断浏览器是否支持placeholder属性,如果不支持则使用模拟placeholder

//判断是否支持placeholder属性

function isPlaceholer(){

var input = document.createElement(‘input’);

return “placeholder” in input;

}

2, 我们创建一个label标签:<label>密码</label> 标签里面的内容为所要添加的提示文案,该文案应该从对应的input|textarea标签取得其placeholder属性值,再将label标签遮盖 到所对应的input|textarea上。

label标签覆盖到相应的input上

如上图,IE8不支持placeholder属性,就为三个input添加placeholder的模拟,在body上分别添加label标签,分别对应“邮箱”、“密码”、“请输入验证码”三个输入框。将三个label分别定为到input输入框的位置。

3,添加事件,当label被点击或input|textarea获得焦点时将label的display设为none;

当input|textarea获得焦点时再将其显示。

具体实现代码如下:

if(!isPlaceholer()){ // 如果不支持placeholder属性

//创建一个类

function Placeholder(obj){

this.input = obj; // obj为添加了placeholder属性的input|textarea

this.label = document.createElement(‘label’); // 创建label标签

// label标签的innerHTML设为input|textarea 的placeholder属性值。

this.label.innerHTML = obj.getAttribute(‘placeholder’);

this.label.style.cssText = ‘position:absolute; text-indent:4px;color:#999999; font-size:14px;’;

if(obj.value != ”){

this.label.style.display = ‘none’;

};

this.init();

}

Placeholder.prototype = {

//获取input|textarea的位置,以便相应的label定位

getxy : function(obj){

var left, top;

if(document.documentElement.getBoundingClientRect){

var html = document.documentElement,

body = document.body,

pos = obj.getBoundingClientRect(),

st = html.scrollTop || body.scrollTop,

sl = html.scrollLeft || body.scrollLeft,

ct = html.clientTop || body.clientTop,

cl = html.clientLeft || body.clientLeft;

left = pos.left + sl – cl;

top = pos.top + st – ct;

}else{

while(obj){

left += obj.offsetLeft;

top += obj.offsetTop;

obj = obj.offsetParent;

}

}

return{

left: left,

top : top

}

},

//取input|textarea的宽高,将label设为相同的宽高

getwh : function(obj){

return {

w : obj.offsetWidth,

h : obj.offsetHeight

}

},

//添加宽高值方法

setStyles : function(obj,styles){

for(var p in styles){

obj.style[p] = styles[p]+’px’;

}

},

init : function(){

var label = this.label,

input = this.input,

getXY = this.getxy,

xy = this.getxy(input),

wh = this.getwh(input);

this.setStyles(label, {‘width’:wh.w, ‘height’:wh.h, ‘lineHeight’:40, ‘left’:xy.left+8, ‘top’:xy.top});

document.body.appendChild(label);

label.onclick = function(){

this.style.display = “none”;

input.focus();

}

input.onfocus = function(){

label.style.display = “none”;

};

input.onblur = function(){

if(this.value == “”){

label.style.display = “block”;

}

};

if(window.attachEvent){

window.attachEvent(“onresize”,function(){// 因为label标签添加到body上,以body为绝对定位,所以当页面

var xy = getXY(input);

Placeholder.prototype.setStyles(label, {‘left’:xy.left+8, ‘top’:xy.top});

})}else{

window.addEventListener(“resize”,function(){

var xy = getXY(input);

Placeholder.prototype.setStyles(label, {‘left’:xy.left+8, ‘top’:xy.top});

},false);

}

}

}

var inpColl = document.getElementsByTagName(‘input’),

textColl = document.getElementsByTagName(‘textarea’);

//html集合转化为数组

function toArray(coll){

for(var i = 0, a = [], len = coll.length; i < len; i++){

a[i] = coll[i];

}

return a;

}

var inpArr = toArray(inpColl),

textArr = toArray(textColl),

placeholderArr = inpArr.concat(textArr);

for (var i = 0; i < placeholderArr.length; i++){ // 分别为其添加替代placeholder的label

if (placeholderArr[i].getAttribute(‘placeholder’)){

new Placeholder(placeholderArr[i]);

}

}

}

—————————————————————————————————————————

PS:

对于chrome浏览器,如果支持placeholder属性,placeholder的内容当input|textarea获得焦点时并不消失, 只有当有内容输入时才会消失,之前有人提议为了浏览器体验一致,即使chrome浏览器支持placeholder属性,也使用替换方法,来达到 input|textarea获得焦点,提示文案立即消失的效果,个人认为不需要多此一举,因为对用户而言用户不会频繁同时使用多了浏览器。

时间: 2024-11-02 23:33:11

HTML5的placeholder 属性的向下兼容的相关文章

解决HTML5中placeholder属性兼容性的JQuery插件

//调用方法 $(function () {   $(".pHolder").jason(); }); //HTML代码 <input type="text" class="pHolder" placeholder="请输入姓名" /> //jquery插件 ($.fn.jason = function(a) {    var b = {        focus: "black",      

html5的placeholder属性(IE如何兼容placeholder属性)

界面UI推荐 jquery html5 实现placeholder兼容password  IE6 html5的placeholder属性(IE如何兼容placeholder属性) 2013-01-05 10:26:06|  分类: web学习 |  标签:html  js  ie  placeholder  |举报 |字号大中小 订阅 placeholder属性,IE对其的支持表示无奈,firefox.google chrome表示毫无压力. HTML5对Web Form做了许多增强,比如inp

HTML5之placeholder属性以及如何更改placeholder属性中文字颜色

今天在群里看到群友问了一个这样的问题,就是如何更改placeholder属性中文字的颜色,以前用过这属性,却是没更改过颜色,于是便试了试,中途遇到些问题,查找资料后特来总结一下. 熟悉HTML5的人应该都知道,placeholder这个属性是HTML5中新增的属性,该属性的作用是规定可描述输入字段预期值的简短的提示信息,该提示会在用户输入之前显示在输入字段中,会在用户输入字段后消失,有些浏览器则是获得焦点后该提示便消失(如Safari.IE) 适用范围:placeholder 属性适用于下面的

Html5的placeholder属性(IE兼容)

HTML5对Web Form做了很多增强,比方input新增的type类型.Form Validation等. Placeholder是HTML5新增的还有一个属性,当input或者textarea设置了该属性后.该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文字消失.曾经要实现这效果都是用JavaScript来控制才干实现 , firefox.google chrome等表示对其支持 , 只有IE存在违和感啊! 比如:  <input id="t1" type

【工作笔记五】html5的placeholder属性(IE如何兼容placeholder属性)

placeholder属性,IE对其的支持表示无奈,firefox.google chrome表示毫无压力. HTML5对Web Form做了许多增强,比如input新增的type类型.Form Validation等.Placeholder是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文字消失.以前要实现这效果都是用JavaScript来控制才能实现: <input id="t1" 

让IE下支持Html5的placeholder属性

HTML5对Web Form做了许多增强,比如input新增的type类型.Form Validation等. Placeholder 是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文 字消失.以前要实现这效果都是用JavaScript来控制才能实现 , firefox.google chrome等表示对其支持 , 唯独IE存在违和感啊! 例如: <input id="t1" type

HTML5的placeholder属性如何实现换行

在HTML5中,placeholder是一个非常有用的属性,当控件中无内容时可以代替UI控件的提示功能,而不需要写额外的代码.但如果有一个textarea控件,我们需要多行的文本提示信息时,使用”\n”, ““均不能实现换行功能:后来在一次无意中的操作,实现了placeholder的换行功能. placeholder的属性值本身包含格式信息,但不能转义字符(如’\n’, ‘\t’),在编辑器中可直接使用回车实现placeholder的换行功能.如:<textarea placeholder=&quo

[干货]兼容HTML5的Placeholder属性-更新版v0.10102013

HTML5对Web Form做了许多增强,比如input新增的type类型.Form Validation等.Placeholder是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文字消失. 这里提供了Placeholder的兼容方法,更新如下: 1.将方法修改为node原生对象的继承对象2.兼容input类型为password的文本框3.提供样式名称作为参数,可以灵活设置样式,修正样式设置一处问题4.

ie兼容html5中placeholder属性

<!doctype html><html><head><meta charset="utf-8"><title>placeholder</title> <script id="jquery_183" type="text/javascript" class="library" src="C:/Users/Administrator/Desk