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/

    作者:达奇
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    关于返回上一页功能
    Mybatis Update statement Date null
    SQLite reset password
    Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题
    Eclipse使用Maven2的一次环境清理记录
    Server Tomcat v7.0 Server at localhost failed to start
    PowerShell一例
    Server Tomcat v7.0 Server at libra failed to start
    商标注册英语
    A glance for agile method
  • 原文地址:https://www.cnblogs.com/dachie/p/2632422.html
Copyright © 2011-2022 走看看