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 13 Javascript
ExtJs grid行 右键菜单的两种方法
Jun 19 Javascript
基于jquery的商品展示放大镜
Aug 07 Javascript
jquery 操作DOM案例代码分享
Apr 05 Javascript
JavaScript学习笔记记录我的旅程
May 23 Javascript
JS onkeypress兼容性写法详解
Apr 27 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
jquery-mobile基础属性与用法详解
Nov 23 Javascript
Vue-router 中hash模式和history模式的区别
Jul 24 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
Nov 27 Javascript
vue随机验证码组件的封装实现
Feb 19 Javascript
Vue OpenLayer 为地图绘制风场效果
Apr 24 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
php stream_get_meta_data返回值
2013/09/29 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
js实现抽奖效果
2017/03/27 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
自定义django admin model表单提交的例子
2019/08/23 Python
Python运行DLL文件的方法
2020/01/17 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
Python itertools.product方法代码实例
2020/03/27 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
导游词300字
2015/02/13 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
《鲁滨逊漂流记》之六读后感(4篇)
2019/09/29 职场文书
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript