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

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

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

 <form name="doluform" id="loginform">
<div class="inputdivin">
<input type="text" placeholder="用户名" name="usernamez" value=""/>
<p class="tipsdiv"><span id="logintipsp"></span></p>
</div>
<div class="inputdivin">
<input type="password" placeholder="密码" name="passwordz" value=""/>
<span style="display:none" class="placespan"></span>
<p class="tipsdiv"><span id="loginposswordtipsp"></span></p>
</div>
<div class="inputivin">
<p id="jhemail"></p>
</div>
<div class="inputdivin">
<button type="submit" title="点击登录" class="submitbtn">登&nbsp;录</button>
</div>
<div class="inputdivin">
<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>
<p class="findpassword"><a href="${ctx}/home/index/findpassword_step1.jsp" class="passwordaction">忘记密码</a></p>
</div>
</form>

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

 var Inputplace=function(){
this.obj=null;
this.type="";
this.color="";
this.tipspan=null;
}
Inputplace.prototype.init=function(obj,opt){
var This=this;
this.obj=obj;
this.setting={
"defaultz":obj.attr("placeholder"),
"tccolor":"#6d696a"
}
$.extend(this.setting,opt);
this.oldcolor=obj.css("color");
this.type=obj.attr("type");
if(this.type=="text"){//文本input设置
this.obj.val(this.setting.defaultz).css("color",this.setting.tccolor);
this.obj.unbind("focus");
this.obj.focus(function(){
if(This.obj.val()==This.setting.defaultz){
This.obj.val("").css("color",This.oldcolor);
}
})
this.obj.unbind("blur");
this.obj.blur(function(){
if(This.obj.val()=="" || /^\s*$/.test(This.obj.val())){
This.obj.val(This.setting.defaultz).css("color",This.setting.tccolor);
}
})
}
else if(this.type=="password"){//密码input实现
this.tipspan=this.obj.next("span.placespan");
this.tipspan.show().html(this.setting.defaultz).css({"color":this.setting.tccolor});
this.obj.unbind("focus");
this.obj.focus(function(){
This.tipspan.hide();
})
this.tipspan.unbind("click");
this.tipspan.click(function(){
$(this).hide();
This.obj.focus();
})
this.obj.unbind("blur");
this.obj.blur(function(){
if(This.obj.val()=="" || /^\s$/.test(This.obj.val())){
This.tipspan.show();
}
})
}
}

而调用方法如下:

 <!--[if lte IE 9 ]>
<script type="text/javascript" src="${ctx}/static/js/common/jsplaceholder.js"></script>
<script type="text/javascript">
$(function(){
var inputtext=$("input:text");
inputtext.each(function(){
new Inputplace().init($(this))
})
var inputpass=$("input:password");
inputpass.each(function(){
new Inputplace().init($(this))
})
})
</script>
<![endif]-->

其中主要的坑就是在于input的类型上,当input为password的时候,如果你还只是直接设置val来做提示,那你就已经掉坑里啦,因为在password 会把输入的内容成..的形式,所以得绕一下,如果是password的话可以在password的那一组里新增一个元素去显示要提示的内容,像其中<span style="display:none" class="placespan"></span>就是专门用来做提示用的,在CSS里要先写好提示所用到的一干样式,样式为tipsdiv的P元素是用来放验证提示内容的,这里不用管,当表单获得焦点的时候或者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

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

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

    对于密码输入框placeholder的兼容问题:HTML代码:<input type="password" id="loginPassword" plac ...

  2. IE6-7下margin-bottom不兼容解决方法(非原创,视频中看到的)

    在IE低版本下有很多不兼容,现在将看到的   IE6-7下margin-bottom不兼容解决方法   演示一下,方便日后自己查阅. <!DOCTYPE html> <html la ...

  3. 兼容ie浏览器的placeholder的几种方法

    项目中遇到的问题,试了几种方法,今天整理出来,如果有不合适的地方,希望大家多多提意见. 第一种方法是:使用html新增的属性 “data-”来实现的,实现的时候,input框没有使用placehole ...

  4. (转)html5 Placeholder属性兼容IE6、7方法

    使低版本浏览器支持Placeholder有很多方法,都不是很完美,或多或少有点问题,且有些原生支持的浏览器在获得焦点时会清空Placeholder提示.发现zhihu的解决方法不错,特记录下 wind ...

  5. ie9 placeholder兼容代码方法

    function guid() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r ...

  6. placeholder解决兼容各种IE浏览器的方法

    <input id="search" type="text" class="box" class="inputText&qu ...

  7. placeholder的兼容处理(jQuery下)

    这是一个老问题,结合前辈们的经验,需要处理的问题有一下几个. 1.只有输入框(input/textarea)下的palaceholder属性存在的时候才需要处理这类兼容 2.处理好输入框上焦点和是焦点 ...

  8. placeholder属性兼容ie8

    <!doctype html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. html5 placeholder属性兼容ie11

    placeholder 属性是html5的属性,用于提供描述输入字段预期值的提示信息(hint). 简单例子: <!DOCTYPE HTML> <html> <body& ...

随机推荐

  1. JS---设置简易红绿灯

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. python3 + selenium + eclipse 中报错:'geckodriver' executable needs to be in PATH

    Windows系统解决办法如下: 1.下载geckodriver.exe: 下载地址:https://github.com/mozilla/geckodriver/releases 请根据系统版本选择 ...

  3. H+ Se7en WebUI

    http://www.zi-han.net/theme/hplus/webim.html

  4. [poj1830]开关问题(高斯消元)

    题意:求高斯消元中自由元的个数,输出1<<ans; #include<cstdio> #include<cstdlib> #include<cstring&g ...

  5. 转-tcp建立和释放详解

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删 ...

  6. 转:isualvm远程监控Tomcat

    一.Java VisualVM 概述 对于使用命令行远程监控jvm 太麻烦 . 在jdk1.6 中 Oracle 提供了一个新的可视化的. JVM 监控工具 Java VisualVM .jvisua ...

  7. 图解Mysql语句的执行过程

    当我们希望Mysql能够高性能的执行查询语句时,其实最好的方法就是搞清楚Mysql到底是怎样执行查询的.一旦理解这一点,很多的查询优化工作实际上就是遵循一些原则让查询优化器能够按照预想的合理的方式运行 ...

  8. python读写xlsx

    1使用openpyxl库读写excel xlrd和xlwt处理的是xls文件,单个sheet最大行数是65535,如果有更大需要的,建议使用openpyxl函数,最大行数达到1048576.  如果数 ...

  9. 719D(树形dp)

    题目链接:http://codeforces.com/contest/791/problem/D 题意:给出一棵树,每两个点之间的距离为1,一步最多可以走距离 k,问要将任意两个点之间的路径都走一遍, ...

  10. python unittest模块

    import unittest import random class Operation(object): def __init__(self, num1=0, num2=0): if not (0 ...