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数组使用调用方法汇总
Dec 08 Javascript
JavaScript函数、方法、对象代码
Oct 29 Javascript
JavaScript高级程序设计 事件学习笔记
Sep 10 Javascript
用jquery中插件dialog实现弹框效果实例代码
Nov 15 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
Jan 17 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
Jul 04 Javascript
jQuery中Nicescroll滚动条插件的用法
Nov 10 Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 Javascript
JavaScript数组和对象的复制
Mar 21 Javascript
jQuery+ajax实现局部刷新的两种方法
Jun 08 jQuery
AngularJS对动态增加的DOM实现ng-keyup事件示例
Mar 12 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
python树的同构学习笔记
2019/09/14 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
LINUX下线程,GDI类的解释
2016/12/14 面试题
介绍一下write命令
2012/09/24 面试题
应聘护士自荐信
2013/10/21 职场文书
高中毕业的自我鉴定
2013/12/09 职场文书
电脑饰品店的创业计划书
2014/01/21 职场文书
《口技》教学反思
2014/02/21 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
领导欢送会主持词
2015/07/06 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书