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日历 推荐
Dec 03 Javascript
JQuery 将元素显示在屏幕的中央的代码
Feb 27 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
Jun 29 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
vue2组件实现懒加载浅析
Mar 29 Javascript
Vue2.0使用过程常见的一些问题总结学习
Apr 10 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
Jul 13 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 Javascript
详解vue-cli之webpack3构建全面提速优化
Dec 25 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
Mar 06 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
Apr 10 Javascript
vue 中的动态传参和query传参操作
Nov 09 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
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
Python魔术方法详解
2015/02/14 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
Django实现随机图形验证码的示例
2020/10/15 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
联欢晚会主持词
2014/03/25 职场文书
移风易俗倡议书
2014/04/15 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
教师远程研修感悟
2015/11/18 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL
Mysql 一主多从的部署
2022/05/20 MySQL
Nginx利用Logrotate实现日志分割
2022/05/20 Servers