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 相关文章推荐
浅谈javascript的数据类型检测
Jul 10 Javascript
JQuery拖拽元素改变大小尺寸实现代码
Dec 10 Javascript
求数组最大最小值方法适用于任何数组
Aug 16 Javascript
css与javascript跨浏览器兼容性总结
Sep 15 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
js实现滑动触屏事件监听的方法
May 05 Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 Javascript
JQuery实现的按钮倒计时效果
Dec 23 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 Javascript
vue路由跳转时判断用户是否登录功能的实现
Oct 26 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/02/22 PHP
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
jquery.validate使用时遇到的问题
2015/05/25 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
Angular 如何使用第三方库的方法
2018/04/18 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
JS中数据结构之栈
2019/01/01 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
对python Tkinter Text的用法详解
2018/10/11 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
Python3实现二叉树的最大深度
2019/09/30 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
见习报告的格式
2014/11/04 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
办公用品质量保证书
2015/05/11 职场文书
2016年暑期社会实践活动总结报告
2016/04/06 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python