placeholder的兼容处理方法

placeholder是html5新增的一个属性,极大的减轻了表单提示功能的实现,但是对于IE6-IE9真的是只能靠自己写啦!

但是在自己写时会掉进了一个坑里,还好用了一会时间还是爬出来啦。

最终的解决方法方法如下:

 1 <form name="doluform" id="loginform">
 2     <div class="inputdivin">
 3         <input type="text" placeholder="用户名" name="usernamez" value=""/>
 4         <p class="tipsdiv"><span id="logintipsp"></span></p>
 5     </div>
 6     <div class="inputdivin">
 7         <input type="password" placeholder="密码" name="passwordz" value=""/>
 8         <span style="display:none" class="placespan"></span>
 9         <p class="tipsdiv"><span id="loginposswordtipsp"></span></p>
10     </div>
11     <div class="inputivin">
12         <p id="jhemail"></p>
13     </div>
14     <div class="inputdivin">
15         <button type="submit" title="点击登录" class="submitbtn">登&nbsp;录</button>
16     </div>
17     <div class="inputdivin">
18         <p class="passwordbc"><a href="javascript:void(0);" class="passwordaction" id="holdpassword"><b class="test"></b>&nbsp;&nbsp;记住密码<input type="hidden" name="remfor_input" value="1"/></a></p>
19         <p class="findpassword"><a href="${ctx}/home/index/findpassword_step1.jsp" class="passwordaction">忘记密码</a></p>
20     </div>
21 </form>

而对应的js组件写法如下:

 1 var Inputplace=function(){
 2     this.obj=null;
 3     this.type="";
 4     this.color="";
 5     this.tipspan=null;
 6 }
 7 Inputplace.prototype.init=function(obj,opt){
 8     var This=this;
 9     this.obj=obj;
10     this.setting={
11         "defaultz":obj.attr("placeholder"),
12         "tccolor":"#6d696a"
13     }
14     $.extend(this.setting,opt);
15     this.oldcolor=obj.css("color");
16     this.type=obj.attr("type");
17     if(this.type=="text"){//文本input设置
18         this.obj.val(this.setting.defaultz).css("color",this.setting.tccolor);
19         this.obj.unbind("focus");
20         this.obj.focus(function(){
21             if(This.obj.val()==This.setting.defaultz){
22                 This.obj.val("").css("color",This.oldcolor);
23             }
24         })
25         this.obj.unbind("blur");
26         this.obj.blur(function(){
27             if(This.obj.val()=="" || /^\s*$/.test(This.obj.val())){
28                 This.obj.val(This.setting.defaultz).css("color",This.setting.tccolor);
29             }
30         })
31     }
32     else if(this.type=="password"){//密码input实现
33         this.tipspan=this.obj.next("span.placespan");
34         this.tipspan.show().html(this.setting.defaultz).css({"color":this.setting.tccolor});
35         this.obj.unbind("focus");
36         this.obj.focus(function(){
37             This.tipspan.hide();
38         })
39         this.tipspan.unbind("click");
40         this.tipspan.click(function(){
41             $(this).hide();
42             This.obj.focus();
43         })
44         this.obj.unbind("blur");
45         this.obj.blur(function(){
46             if(This.obj.val()=="" || /^\s$/.test(This.obj.val())){
47                 This.tipspan.show();
48             }
49         })
50     }
51 }

而调用方法如下:

 1 <!--[if lte IE 9 ]>
 2 <script type="text/javascript" src="${ctx}/static/js/common/jsplaceholder.js"></script>
 3 <script type="text/javascript">
 4     $(function(){
 5         var inputtext=$("input:text");
 6         inputtext.each(function(){
 7             new Inputplace().init($(this))
 8         })
 9         var inputpass=$("input:password");
10         inputpass.each(function(){
11             new Inputplace().init($(this))
12         })
13     })
14 </script>
15 <![endif]-->

其中主要的坑就是在于input的类型上,当input为password的时候,如果你还只是直接设置val来做提示,那你就已经掉坑里啦,因为在password 会把输入的内容成..的形式,所以得绕一下,如果是password的话可以在password的那一组里新增一个元素去显示要提示的内容,像其中<span style="display:none" class="placespan"></span>就是专门用来做提示用的,当表单获得焦点的时候,或者span被点击的时候span都会消失,而input开始可以输入内容啦。

<div class="inputdivin">
    <input type="password" placeholder="密码" name="registerpassword" value=""/>
    <span style="display:none" class="placespan"></span>
    <p class="tipsdiv"><span id="registerpasswordtipsid"></span></p>
</div>

注:就在html5的placeholder能用的情况下,在各浏览器下也会有一些差异,在ff和chrome下,输入框获得焦点时,placeholder文字没有变化,只有当输入框中输入了内容时,placeholder文字才消失;而在safari和ie10-ie11下,当输入框获得焦点时,placeholder文字便立即消失。

默认情况下,placeholder的文字是灰色,输入的文字是黑色。而我们拿到的设计稿上的色值往往并不与默认情况下完全一致。那么,如何修改placeholder的色值呢?

如果直接写input{color:red;},可以看到,ie10和ff下,placeholder文字和输入文字都变成了红色.

而在chrome和safari下,placeholder文字颜色不变,只有输入的文字变成红色。

显然,这种做法是行不通的。因为我们只想改变placeholder文字的颜色,并不想改变输入文字的颜色。

正确的写法如下:

::-moz-placeholder{color:red;}              //ff

::-webkit-input-placeholder{color:red;}     //chrome,safari

:-ms-input-placeholder{color:red;}          //ie10

时间: 2024-10-06 19:17:46

placeholder的兼容处理方法的相关文章

placeholder不兼容 IE10 以下版本的解决方法

对于密码输入框placeholder的兼容问题: HTML代码: <input type="password" id="loginPassword" placeholder="密码(6-16位字母数字)" class="width270"> <input type="text" passwordMask="true" placeholder="密码(6-16位

sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法

昨晚配置完成office web apps 2013的外部网络访问之后,今天发现了一个很奇怪的问题,就是IE 11不支持文档在线浏览,找了很多方法,打补丁什么的,都不管用,最后在预览文件的页面,看到<head>标签,里面有一句代码: <meta http-equiv="X-UA-Compatible" content="IE=99" /> 我把他改成了 <meta http-equiv="X-UA-Compatible&quo

Windows8 解决VMware与Hyper-V不兼容共存方法

Windows8 解决VMware与Hyper-V不兼容共存方法 | 浏览:942 | 更新:2013-09-16 14:04 | 标签: windows8 1 2 3 4 5 6 7分步阅读 今天无意中 在电脑安装了一个Hyper-V功能装完后重启电脑发现打开VMware居然出错然后百度一下说不共享于是找到个方法 但都不人性化 现在写这遍希望能让大家看得懂 方法/步骤 1 首先win+X 2 命令提示符(管理员) 3 键入:bcdedit /copy {default} /d "Windows

调浏览器兼容步骤方法

终于完成了页面代码的编写.师傅叫我现在开始调浏览器的兼容性.在火狐和chrome中都显示的好好的页面,在ie8中就开始显示不行了.调试的最好方法就是逐步审查,用排除法. 首先,在ie中貌似对标签是否完整有要求.当笔者就是在某个地方<a>标签不完整导致div快显示有问题.所以在ie调试之前先审查自己的标签. 其次,建议先从高版本的浏览器进行调试. 最后,常见的问题: 1.fixed元素 当我上面一个标签使用了fixed属性时,相邻的标签用margin这个属性与其保持间距就会失效. 解决方案:1.

placeholder的兼容处理(jQuery下)

这是一个老问题,结合前辈们的经验,需要处理的问题有一下几个. 1.只有输入框(input/textarea)下的palaceholder属性存在的时候才需要处理这类兼容 2.处理好输入框上焦点和是焦点的文本显示 3.密码输入框比较特殊,因为为其设置显示文本时显示的是一串“***”.这个问题后面分析.处理好前两点还是比较简单的,处理源码为如下 var browserSupport = { placeholder: 'placeholder' in document.createElement('i

placeholder属性兼容ie8

<!doctype html> <html> <head> <meta charset="utf-8" /> <title>登陆框的制作</title> <script src="jquery-1.11.3.js"></script> <script src="jquery.cookie.js"></script> <sc

ADS1.2和MDK兼容解决方法

报错如下: 原因: ADS1.2与MDK不兼容 最近安装了Keil 4.73的最新版本,却莫名其妙的出现了与ADS 1.2软件不兼容的情况,弄了半天才弄好,为了大家少走点弯路, 把网上论坛的解放方案分享一下(呵呵,原封不动抄周立功论坛的,内容如下:) /************************************************************************************************/ 如果以前玩过ARM7,使用过ADS软件,那么安装新

ie6,ie7,ie8 css bug汇总以及兼容解决方法

1:li边距“无故”增加 任何事情都是有原因的,li边距也不例外. 先描述一下具体状况:有些时候li边距会突然增 加很多,值也不固定(只在IE6/IE7有这种现象),让人摸不着头脑,仔细“研究”发现是由于其低级元素ul的padding引 起,padding的上下值对li有影响,左右无影 响.所以只好笨手笨脚地把padding去掉,换成margin.这是能解决问题,但往往不是我们想要的结果,或许 还会引起其他不必要的怪现象. 解决这个问题的方法,其实很简单,既然是有ul引 起的,就设置ul的显示形

FCKEditor在IE10下的不兼容问题解决方法

环境介绍:FCKEditor 版本 2.x.x 问题:IE10 下FCKEditor不兼容,显示不出来 关键词:不同于其他方法之处是第一个关键点,其他网友的正则表达式不对 解放方法:(可以直接<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />解决,也可以如下) 1.在 fckeditor/fckeditor.js 文件 > 方法: FCKeditor_IsCompatibleB