zoukankan      html  css  js  c++  java
  • 【jquery】基于 jquery 实现 ie 浏览器兼容 placeholder 效果

    原文链接:http://www.cnblogs.com/yjzhu/p/4398835.html

    placeholder 是 html5 新增加的属性,主要提供一种提示(hint),用于描述输入域所期待的值。该提示会在输入字段为空时显示,并会在字段获得焦点时消失。placeholder 属性适用于以下类型的 input 标签:text, search, url, telephone, email 以及 password。

    我们先看下在谷歌浏览器中的效果,如图所示:

    获得焦点时:

    输入字段:

    因为是 html5 属性,自然低版本的浏览器比如 ie6-8 不兼容。下面就介绍下如何在低版本浏览器中显示以上效果,话不多说直接上代码。

    html:

    复制代码
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <meta name="renderer" content="webkit"/>
        <meta name="keywords" content=""/>
        <meta name="description" content=""/>
        <title>基于 jquery 实现 ie 浏览器兼容 placeholder 效果</title>
        <style>
        *{margin:0;padding:0;}
        .txt{position:relative;font-size:12px;margin:10px;}
        .txt input{border:1px solid #ccc;height:30px;line-height:30px;padding:0 10px;200px;}
        .txt .txt-tip{color:#999;position:absolute;left:10px;top:0;height:32px;line-height:34px;}
        </style>
    </head>
    <body>
        <div class="txt">
            <input type="text" value=""/>
        </div>
    </body>
    </html>
    <script src="js/jquery.min.js"></script>
    <script src="js/placeholder.js"></script>
    <script>
    $(function(){
        var $input = $('.txt input');
        initPlaceholder($input, '请输入内容', 'txt-tip');
    });
    </script>
    复制代码

    placeholder.js:

    复制代码
    function initPlaceholder($input, msg, classname){
        var isIE = !!window.ActiveXObject || 'ActiveXObject' in window;
        var isPlaceholder = 'placeholder' in document.createElement('input');
        if(isPlaceholder && !isIE){
            $input.attr('placeholder', msg);
        }else{
            var $tip = $('<span></span>');
            $input.removeAttr('placeholder');
            if($input.is(':hidden')){
                $tip.hide();
            }
            $tip.addClass(classname).text(msg);
            $input.after($tip);
            $.data($input[0], 'tip', $tip);
            if($input.val() != ''){
                hidePHTip($input);
            }
            dealPHTip($input, $tip);
        }
    }
    function hidePHTip($input){
        var $tip = $.data($input[0], 'tip');
        if($tip){
            $tip.hide();
        }
    }
    function dealPHTip($input, $tip){
        var _deal = function(){
            var val = $input.val();
            if(val == ''){
                $tip.show();
            }else{
                $tip.hide();
            }
        };
        $tip.click(function(){
            $input.focus();
        });
        $input.on('input propertychange', function(){
            clearTimeout(timeout);
            var timeout = setTimeout(_deal, 0);
        });
    }
    复制代码

    实现原理:首先过滤下浏览器,非 ie 浏览器并且支持 placeholder 属性就用 placeholder,ie 浏览器则用 span 代替 placeholder 文本内容,通过样式定位在 input 上方,同时监听 input 输入框值的变化来判断显示或隐藏 span。

    我们来看下 ie6 浏览器中的效果:

    获得焦点时:

    输入字段:

    可以看到和谷歌浏览器的效果是一致的,唯一不足的就是文字没有居中,可以通过 css 进行修改。

  • 相关阅读:
    [XJOI]noip43 T2多人背包
    Codeforces Round #198 (Div. 2)E题解
    [XJOI]noip40 T2统计方案
    Codeforces Round #198 (Div. 2)C,D题解
    Codeforces Round #198 (Div. 2)A,B题解
    9.19[XJOI] NOIP训练37
    9.18[XJOI] NOIP训练36
    kmp算法详解
    [模板系列] AC自动姬
    luogu1967[NOIP2013D1T3] 货车运输 (最大生成树+LCA)
  • 原文地址:https://www.cnblogs.com/jquery37/p/4401825.html
Copyright © 2011-2022 走看看