zoukankan      html  css  js  c++  java
  • HTML5 INPUT placeholder及兼容性处理

    HTML5对Web Form做了许多增强,比如input新增的type类型、Form Validation等。Placeholder是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文字消失。以前要实现这效果都是用JavaScript来控制才能实现:

    由于placeholder是个新增属性,目前只有少数浏览器支持,如何检测浏览器是否支持它呢?(更多HTML5/CSS3特性检测可以访问)

    function hasPlaceholderSupport() {
      return 'placeholder' in document.createElement('input');
    }

    默认提示文字是灰色的,可以通过CSS来改变文字样式:

     
    /* all */
    ::-webkit-input-placeholder { color:#f00; }
    input:-moz-placeholder { color:#f00; }
     
    /* individual: webkit */
    #field2::-webkit-input-placeholder { color:#00f; }
    #field3::-webkit-input-placeholder { color:#090; background:lightgreen; text-transform:uppercase; }
    #field4::-webkit-input-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }
     
    /* individual: mozilla */
    #field2:-moz-placeholder { color:#00f; }
    #field3:-moz-placeholder { color:#090; background:lightgreen; text-transform:uppercase; }
    #field4:-moz-placeholder { font-style:italic; text-decoration:overline; letter-spacing:3px; color:#999; }
    

    兼容其他不支持placeholder的浏览器:

    var PlaceHolder = {
        _support: (function() {
            return 'placeholder' in document.createElement('input');
        })(),

        //提示文字的样式,需要在页面中其他位置定义
        className: 'abc',

        init: function() {
            if (!PlaceHolder._support) {
                //未对textarea处理,需要的自己加上
                var inputs = document.getElementsByTagName('input');
                PlaceHolder.create(inputs);
            }
        },

        create: function(inputs) {
            var input;
            if (!inputs.length) {
                inputs = [inputs];
            }
            for (var i = 0, length = inputs.length; i <length; i++) {
                input = inputs[i];
                if (!PlaceHolder._support && input.attributes && input.attributes.placeholder) {
                    PlaceHolder._setValue(input);
                    input.addEventListener('focus', function(e) {
                        if (this.value === this.attributes.placeholder.nodeValue) {
                            this.value = '';
                            this.className = '';
                        }
                    }, false);
                    input.addEventListener('blur', function(e) {
                        if (this.value === '') {
                            PlaceHolder._setValue(this);
                        }
                    }, false);
                }
            }
        },

        _setValue: function(input) {
            input.value = input.attributes.placeholder.nodeValue;
            input.className = PlaceHolder.className;
        }
    };

    //页面初始化时对所有input做初始化
    //PlaceHolder.init();
    //或者单独设置某个元素
    //PlaceHolder.create(document.getElementById('t1'));

    文章转自: http://blog.tugai.net/2011/02/17/html5-placeholder/

    作者:达奇
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    转:使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)
    linq 动态组合条件
    转:Web应用程序项目XX已配置为使用IIS
    转:centos彻底删除文件夹、文件命令
    转:WebClient类(温习一下)
    解决 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
    转:装完Centos7提示Initial setup of CentOS Linux 7 (core)
    PL/SQL Developer 登录 Oracle 12c和Win10下安装Oracle 11g
    centos7-linux安装docker(离线方式)
    windows7安装gitblit
  • 原文地址:https://www.cnblogs.com/dachie/p/2632422.html
Copyright © 2011-2022 走看看