Posted in Javascript onJanuary 13, 2013
html5原生支持placeholder,对于不支持的浏览器(ie),可用js模拟实现。
js代码
(function(){ //判断是否支持placeholder function isPlaceholer(){ var input = document.createElement('input'); return "placeholder" in input; } //不支持的代码 if(!isPlaceholer()){ //创建一个类 function Placeholder(obj){ this.input = obj; this.label = document.createElement('label'); this.label.innerHTML = obj.getAttribute('placeholder'); this.label.style.cssText = 'position:absolute; text-indent:4px;color:#999999; font-size:12px;'; if(obj.value != ''){ this.label.style.display = 'none'; } this.init(); } Placeholder.prototype = { //取位置 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 } }, //取宽高 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, xy = this.getxy(input), wh = this.getwh(input); this.setStyles(label, {'width':wh.w, 'height':wh.h, 'lineHeight':20, 'left':xy.left, '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"; } }; } } 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++){ if (placeholderArr[i].getAttribute('placeholder')){ new Placeholder(placeholderArr[i]); } } } })()
html代码:
<div> <input type="text" placeholder="提示1" /><br> <textarea placeholder="提示2" /></textarea><br> <input type="text" placeholder="提示3" /><br> </div>
css代码:
div,input,textarea{ margin:0; padding:0;} div{width:400px; margin:100px auto 0;} input,textarea{width:200px;height:20px; margin-top:5px;line-height:20px;border:1px #666666 solid; background-color:#fff; padding-left:2px;} textarea{ height:60px; font-size:12px; resize:none;}
js模仿html5 placeholder适应于不支持的浏览器
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@