js模仿html5 placeholder适应于不支持的浏览器


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;}
Javascript 相关文章推荐
js中的eventType事件及其浏览器支持性介绍
Nov 29 Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 Javascript
JavaScript SHA-256加密算法详细代码
Oct 06 Javascript
react系列从零开始_简单谈谈react
Jul 06 Javascript
原生JavaScript实现todolist功能
Mar 02 Javascript
vue脚手架及vue-router基本使用
Apr 09 Javascript
详解Angular中通过$location获取地址栏的参数
Aug 02 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
Aug 19 Javascript
js实现简单选项卡功能
Mar 23 Javascript
jquery实现选项卡切换代码实例
May 14 jQuery
ES6 async、await的基本使用方法示例
Jun 06 Javascript
element中table高度自适应的实现
Oct 21 Javascript
ie6下png图片背景不透明的解决办法使用js实现
Jan 11 #Javascript
关于全局变量和局部变量的那些事
Jan 11 #Javascript
jquery延迟加载外部js实现代码
Jan 11 #Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
Jan 11 #Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
Jan 11 #Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
Jan 11 #Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
Jan 11 #Javascript
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
php jsonp单引号转义
2014/11/23 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
PHP中使用curl入门教程
2015/07/02 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Django框架安装方法图文详解
2019/11/04 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
python性能测试工具locust的使用
2020/12/28 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
橄榄树药房:OLIVEDA
2019/09/01 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
就业协议书怎么填
2014/04/11 职场文书
专科生就业求职信
2014/06/22 职场文书
大学生团日活动总结
2015/05/06 职场文书
2016年国陪研修感言
2015/11/18 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
MySQL的存储过程和相关函数
2022/04/26 MySQL
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers