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 相关文章推荐
jquery的ajax()函数传值中文乱码解决方法介绍
Nov 08 Javascript
将HTML格式的String转化为HTMLElement的实现方法
Aug 07 Javascript
node.js中的fs.futimes方法使用说明
Dec 17 Javascript
javascript下使用Promise封装FileReader
Feb 19 Javascript
jquery中validate与form插件提交的方式小结
Mar 26 Javascript
javascript实现简易计算器的代码
May 31 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
在Js页面通过POST传递参数跳转到新页面详解
Aug 25 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
微信小程序 下拉刷新及上拉加载原理解析
Nov 06 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 Javascript
js+cavans实现图片滑块验证
Sep 29 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多用户计数器代码
2007/03/11 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
pycharm设置注释颜色的方法
2018/05/23 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Python实现SMTP邮件发送
2020/06/16 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
母婴店促销方案
2014/03/05 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
关于开学的感想
2015/08/10 职场文书
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
一篇文章弄懂Python中的内建函数
2021/08/07 Python