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 相关文章推荐
准确获得页面、窗口高度及宽度的JS
Nov 26 Javascript
JavaScript原型继承之基础机制分析
Aug 26 Javascript
jQuery实用函数用法总结
Aug 29 Javascript
js操作DOM--添加、删除节点的简单实例
Jul 08 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
Jan 19 Javascript
javascript实现非常简单的小数取整功能示例
Jun 13 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
Vue.js划分组件的方法
Oct 29 Javascript
vue2中使用less简易教程
Mar 27 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
原生JS实现的简单小钟表功能示例
Aug 30 Javascript
javascript实现雪花飘落效果
Aug 19 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
Python装饰器基础详解
2016/03/09 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Python中的pack和unpack的使用
2018/03/12 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
办公室文秘自我评价
2013/09/21 职场文书
班级安全教育实施方案
2014/02/23 职场文书
英语分层教学实施方案
2014/06/15 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
房产协议书范本2014
2014/09/30 职场文书
单位委托函范文
2015/01/29 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸