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 validate 验证注册表单实例演示
Mar 25 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
Jan 13 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
Apr 02 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
Jul 28 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
Nov 03 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
js仿3366小游戏选字游戏
Apr 14 Javascript
JS跨域请求外部服务器的资源
Feb 06 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
关于JavaScript的单双引号嵌套问题
Aug 20 Javascript
vue集成百度UEditor富文本编辑器使用教程
Sep 21 Javascript
一文快速详解前端框架 Vue 最强大的功能
May 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
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
pandas中去除指定字符的实例
2018/05/18 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Python笔记之facade模式
2019/11/20 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
大学毕业生个人自荐信范文
2014/01/08 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
2014年科室工作总结
2014/11/20 职场文书
如何写辞职信
2015/05/13 职场文书
董事长助理工作总结2015
2015/07/23 职场文书