IE8下对type=checkbox类型的input的placeholder属性的仿写

placeholder属性是HTML5 中为input添加的。在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示。

    <input type="text" id="userName" placeholder="
用户名"/>
    <input type = "password" id="passWord" placeholder="密码"/>

目前浏览器的支持情况

浏览器

IE6/7/8/9

IE10+

Firefox

Chrome

Safari 

是否支持

NO

YES

YES

YES

YES

 

然而,虽然IE10+支持placeholder属性,它的表现与其它浏览器也不一致

  • IE10+里鼠标点击时(获取焦点)placeholder文本消失

  • Firefox/Chrome/Safari点击不消失,而是键盘输入时文本消失

我们希望IE低版本下实现IE10+ placeholder的效果,可以通过以下方法:

首先css 的样式如下:

    <style type="text/css">

        input[type="text"]

        {

            display:block;

            margin:0 auto;

            width: 230px;

            text-align: center;

        }

        #userName

        {

            margin-top: 31px;

            border: none;

            color: #616060;

            border-bottom: 1px solid #949799;

        }

        #passWord

        {

            display: block;

            margin: 0 auto;

            width: 230px;

            text-align: center;

            font-size: 11px;

            color: #616060;

            border: none;

            border-bottom: 1px solid #949799;

            cursor: pointer;

            padding: 0 0 1px 1px;

            margin-top: 25px;

        }

        #placeholder

        {

            display: block;

            margin: 0 auto;

            width: 230px;

            text-align: center;

            font-size: 11px;

            color: #616060;

            border: none;

            border-bottom: 1px solid #949799;

            cursor: pointer;

            padding: 0 0 1px 1px;

            margin-top: -16px;

            position:relative;

        }

        #placeholder:focus,#placeholder:hover

        {

            color: #1e94da;

            border-color:#1e94da;

        }

        #passWord:focus,#passWord:hover{color: #1e94da;border-color:#1e94da;}

    </style>

对于不涉及转换input的type的仿写比较简单,代码如下:

       $().ready(function(){

            $("#passWord").after("<input type = 'text' value='
密码' id='placeholder'>");

            if($("#userName").val()=="")

            {

                $("#userName").val("用户名");

            }

            $("#userName").focus(function(){

                if($(this).val()=="用户名")

                {

                    $(this).val("");

                }

            });

         });

对于密码框的placeholder的仿写,由于IE8下并不支持input类型type的转换,因此我选择使用两个不同类型密码框叠加的方法实现该效果,具体代码如下:

$().ready(function(){

            //
添加密码提示框

            $("#passWord").after("<input type = 'text' value='密码' id='placeholder'>");

            //对密码框的仿写

            $("#placeholder").focus(function(){

                 $(this).val("");

                 $(this).css("z-index","-1");

                $("#passWord").focus();

            });

            $("#passWord").blur(function(){

                if($(this).val()=="")

                {

                    $("#placeholder").val("密码");

                    $("#placeholder").css("z-index","1");

                }

            });

        });

效果如下:

211912_PvR5_2335552.png

                       图1

点击过后输入密码:

211948_QtPn_2335552.png

                       图2

看上去似乎没什么问题,然而如果密码框中有默认值,则仍会显示密码的提示效果(图1),只有点击过后才会出现如图2的效果,因此我们需要在添加数据后,触发一次focus事件和blur事件:

如下:

            $("#userName").val("hello");
            $("#passWord").val("888888");
            $("#placeholder").focus();
            setTimeout("$('#passWord').blur();",1);

这里使用setTimeout()为blur()添加延时效果,是在IE8中测试过的效果,不知道什么原因,这样写

            $("#placeholder").focus();

            $('#passWord').blur();

在IE8中blur()事件并不能触发,添加了延时后,即能正常实现了

完整的js代码如下:

    <script type="text/javascript">

        $().ready(function(){

            $("#passWord").after("<input type = 'text' value='
密码' id='placeholder'>");

            if($("#userName").val()=="")

            {

                $("#userName").val("账号");

            }

            $("#userName").focus(function(){

                if($(this).val()=="账号")

                {

                    $(this).val("");

                }

            });

            $("#userName").blur(function(){

                if($(this).val()=="")

                {

                    $(this).val("账号");

                }

            });

            $("#placeholder").focus(function(){

                 $(this).val("");

                 $(this).css("z-index","-1");

                $("#passWord").focus();

            });

            $("#passWord").blur(function(){

                if($(this).val()=="")

                {

                    $("#placeholder").val("密码");

                    $("#placeholder").css("z-index","1");

                }

            });

            $("#userName").val("chen");

            $("#passWord").val("888888");

            $("#placeholder").focus();

            setTimeout("$('#passWord').blur();",1);

        });

    </script>

 

转载于:https://my.oschina.net/u/2335552/blog/511358

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值