js模仿html5 placeholder适应于不支持的浏览器

 更新时间:2013年01月13日 13:30:08   作者:  
html5原生支持placeholder,对于不支持的浏览器(ie)可用js模拟实现,不要走开,接下来为您详细介绍实现方法
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;}

相关文章

  • Ajax使用原生态JS验证用户名是否存在

    Ajax使用原生态JS验证用户名是否存在

    这篇文章主要为大家详细介绍了Ajax使用原生态JS验证用户名是否存在的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • js获取时间(本周、本季度、本月..)

    js获取时间(本周、本季度、本月..)

    js获取时间,包括:获取本周、本季度、本月、上月的开端日期、停止日期,下面有个不错的示例,感兴趣的朋友可以参考下
    2013-11-11
  • NestJs使用Mongoose对MongoDB操作的方法

    NestJs使用Mongoose对MongoDB操作的方法

    这篇文章主要介绍了NestJs使用Mongoose对MongoDB操作的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • javascript设计模式 – 状态模式原理与用法实例分析

    javascript设计模式 – 状态模式原理与用法实例分析

    这篇文章主要介绍了javascript设计模式 – 状态模式,结合实例形式分析了javascript状态模式相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • document.onreadystatechange事件的用法分析

    document.onreadystatechange事件的用法分析

    这里主要介绍document.onreadystatechange事件的使用方法, 一般多用于实时监控用户的输入
    2009-10-10
  • canvas时钟效果

    canvas时钟效果

    本文主要介绍了canvas实现时钟效果的代码。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 用Greasemonkey 脚本收藏网站会员信息到本地

    用Greasemonkey 脚本收藏网站会员信息到本地

    写了个Greasemonkey脚本,可以收集世纪佳缘交友网会员搜索结果页你喜欢的会员信息,把它们保存到本地HTML文件,以便日后查阅。为了避免肖像或隐私侵权问题,本文附图将作简单马赛克处理。
    2009-10-10
  • layui自定义工具栏的方法

    layui自定义工具栏的方法

    今天小编就为大家分享一篇layui自定义工具栏的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • zepto.js 实时监听输入框的方法

    zepto.js 实时监听输入框的方法

    今天小编就为大家分享一篇zepto.js 实时监听输入框的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 纯css下拉菜单 无需js

    纯css下拉菜单 无需js

    这篇文章主要为大家详细介绍了纯css下拉菜单代码,无需js,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08

最新评论