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 09 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
jQuery基于扩展简单实现倒计时功能的方法
May 14 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
Aug 03 Javascript
微信小程序 教程之模块化
Oct 17 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
Sep 21 Javascript
解析原来浏览器原生支持JS Base64编码解码
Aug 12 Javascript
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
JS实现电脑虚拟键盘的操作
Jun 24 Javascript
Element Collapse 折叠面板的使用方法
Jul 26 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
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python将多个list合并为1个list的方法
2018/06/27 Python
python实现C4.5决策树算法
2018/08/29 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
Python常驻任务实现接收外界参数代码解析
2020/07/21 Python
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
机关班子查摆问题及整改措施
2014/10/28 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技