zoukankan      html  css  js  c++  java
  • HTML5 的 PLACEHOLDER 属性

    本文转载自: http://www.oschina.net/question/5189_22929

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

    <input id="t1" type="text" placeholder="请输入文字" />

    由于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'));

    另一份兼容代码:

    /** placeholder 插件 **/
        /*initPlaceHolders pluggin: cross-browser support for the HTML5 placeholder attribute on input fields
        http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html
        usage: $('[placeholder]').initPlaceHolders()    //enable for all elements with the attribute placeholder*/
        (function($) {
            //feature detection
            var hasHtml5Support = ('placeholder' in (document.createElement('input')));
            var beforeFormSave = function () {
                        $(this).find('[placeholder]').each(function() {
                            var input = $(this);
                            if (input.val() == input.attr('placeholder')) {
                              input.val('');
                            }
                            input.removeClass('placeholder');
                          });
                    };
            var defaults = {
                    saveContainer: 'form',
                    saveEvent: 'submit'
                };
            var methods = {
                init: function(options) {
                    var settings = $.extend({},defaults,options);
                    
                    if(hasHtml5Support) {
                        return this;
                    }
                    this.live('focus',function() {
                      var input = $(this);
                      if (input.val() == input.attr('placeholder')) {
                        input.val('');
                        input.removeClass('placeholder');
                      }
                    }).live('blur',function() {
                      var input = $(this);
                      if (input.val() == '' || input.val() == input.attr('placeholder')) {
                        input.addClass('placeholder');
                        input.val(input.attr('placeholder'));
                      }
                    }).blur()
                    .parents(settings.saveContainer).bind(settings.saveEvent, beforeFormSave);
                    return this;
                },
                getValue: function() {
                    if(hasHtml5Support) {
                        return this.val();
                    }
                    if(this.val()==this.attr('placeholder')) {
                        return '';
                    }
                    return this.val();
                },
                refresh: function() {
                    if(hasHtml5Support){
                        return this;
                    }
                    return this.each(function(){
                        $(this).trigger('blur');
                    });
                }
            };
            $.fn.initPlaceHolders = function(method) {
                if( methods[method] ) {
                    return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
                } else if ( typeof method === 'object' || ! method ) {
                    return methods.init.apply( this, arguments );
                } else {
                    $.error( 'Method ' +  method + ' does not exist on jQuery.initPlaceHolders' );
                }
            };
        })(jQuery);
    
    /* 使用 */
    $('#searchKey').initPlaceHolders();

     

     

     

  • 相关阅读:
    uniapp上传图片
    vue 路由router传参,刷新丢失问题
    前端网站收藏
    uni.startPullDownRefresh 只能执行一次的解决方案
    移动端,h5页面1px 1像素边框过粗解决方案
    让WebApi支持Namespace
    Ubuntu 14.04下安装GitLab
    Ubuntu学习笔记
    淘宝订单数据转CSV
    修改SQL Server 数据库的编码
  • 原文地址:https://www.cnblogs.com/zjfazc/p/2700222.html
Copyright © 2011-2022 走看看