首页 > 其他 > 详细

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

时间:2015-09-25 23:11:26      阅读:437      评论:0      收藏:0      [点我收藏+]

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");

                }

            });

        });

效果如下:

技术分享

                       图1

点击过后输入密码:

技术分享

                       图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>

 

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

原文:http://my.oschina.net/u/2335552/blog/511358

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!