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中获取iframe的代码
Jan 11 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
Nov 01 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
JS弹出新窗口被拦截的解决方法
Aug 09 Javascript
浅析JavaScript中break、continue和return的区别
Nov 30 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
Dec 01 Javascript
JS中的三个循环小结
Jun 20 Javascript
详解webpack多页面配置记录
Jan 22 Javascript
Express之托管静态文件的方法
Jun 01 Javascript
js布局实现单选按钮控件
Jan 17 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
Nov 10 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
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
一个数据采集类
2007/02/14 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
js 如何实现对数据库的增删改查
2012/11/23 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
jqGrid中文文档之选项设置
2015/12/02 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
python 内置模块详解
2019/01/01 Python
20行python代码实现人脸识别
2019/05/05 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
Python PO设计模式的具体使用
2019/08/16 Python
深入浅析python的第三方库pandas
2020/02/13 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
毕业生就业自荐信
2013/12/04 职场文书
建房协议书
2014/04/11 职场文书
专科生就业求职信
2014/06/22 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
演讲开场白和结束语
2015/05/29 职场文书
护士岗位竞聘书
2015/09/15 职场文书
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
css3带你实现3D转换效果
2022/02/24 HTML / CSS
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS