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 相关文章推荐
IE6下opacity与JQuery的奇妙结合
Mar 01 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
Oct 11 Javascript
jquery 根据name名获取元素的value值
Feb 27 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
JavaScript 动态三角函数实例详解
Jan 08 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
Aug 16 Javascript
Angularjs 1.3 中的$parse实例代码
Sep 14 Javascript
vue项目设置scrollTop不起作用(总结)
Dec 21 Javascript
微信小程序如何获取地址
Dec 24 Javascript
vue引用外部JS的两种种方法
Jan 28 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
oracle资料库函式库
2006/10/09 PHP
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
window.location.hash 属性使用说明
2010/03/20 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
python简单操作excle的方法
2018/09/12 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
英语系本科生个人求职信
2013/09/21 职场文书
会计主管岗位职责范文
2013/11/08 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
党员干部承诺书范文
2014/03/25 职场文书
驾驶员安全责任书
2014/07/22 职场文书
航班延误投诉信
2015/07/02 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python