• jquery水印插件:placeholder


    有的浏览器支持html5的水印placeholder(如Crome,firefox,ie10+),有的不支持html5的placeholder(ie9,ie8,ie7....),对于不支持placeholder的属性也能使用placeholderAttr,于是写了这个简单的jquery插件,发出来与大家分享,实现代码逻辑在代码中都有注释,实现细节请直接参看代码。

    复制代码
    /**
     * jqueryPlug : 给不支持html5 placeholder水印功能的浏览器打补丁
     */
    
    ;(function($){
        'use strict';
        /////////////////////////////////////////////////////////
    
        /*
         * 扩展jquery实例方法
         */
        $.fn.powerplaceholder = function(){
    
            /*
             * PlaceHolder 实例构造函数
             * @param [DOM Instance] elm
             */
            var PlaceHolder = function(elm){
                this.$elm = $(elm);
                this.$span = $("<span></span>").text(this.$elm.attr("placeholder")).css({
                    "position":"absolute",
                    "display":"inline-block",
                    "color":"#ccc",
                    "overflow":"hidden",
                    "padding-left":"2px",
                    "padding-top":"2px",
                    "left":this.$elm.offset().left,
                    "top":this.$elm.offset().top,
                    "font-size":this.$elm.css("font-size"),
                    "width":this.$elm.width()+2,
                    "height":this.$elm.height()+2
                }).appendTo("body");
                this.init();
            }
    
            /**
             * 静态方法:是否支持html5的placeholder
             */
            PlaceHolder.isSupportHtml5 = function(){
                var i = document.createElement('input');
                return 'placeholder' in i;
            }
    
            /**
             * 实例方法:
             */
            PlaceHolder.prototype = {
    
                /*
                 * 控制setInterval方法的实例,释放setInterval
                 */
                intervalInstance:null,
    
                /*
                 * @function 初始化
                 */
                init:function(){
                    this.showOrHide();
    
                    this.$elm.on("focus.PlaceHolder",$.proxy(this.focus,this))
                             .on("blur.PlaceHolder",$.proxy(this.blur,this));
    
                    this.$span.on("click.PlaceHolder",$.proxy(this.clickSpan,this));
                },
    
                /*
                 * 聚焦
                 */
                focus:function(){
                    var self = this;
    
                    // 不要重复调用setInterval
                    if (self.intervalInstance) { 
                        return;
                    }
    
                    /* 
                     * 应该所示插件的核心:每隔50s判断一下输入框是否有值,有值显示,无值隐藏;
                     * 权衡是否这里应该使用keydown来做这个事情,使用setInverval是不是太耗费资源了??
                     */
                    self.intervalInstance = setInterval(function(){
                        self.showOrHide();
                    },50);
                },
    
                /*
                 * 失焦
                 */
                blur:function(){
    
                    // clearInterval
                    clearInterval(this.intervalInstance);
                    this.intervalInstance = null;
    
                    this.showOrHide();
                },
    
                /*
                 * 点击span时要触发输入框的focus事件
                 */
                clickSpan:function(){
                    this.$elm.trigger("focus.PlaceHolder");
                },
    
                /*
                 * 输入框有值显示placeholder,没有值隐藏placeholder
                 */
                showOrHide:function(){
                    if (this.$elm.val()) {
                        this.$span.hide();
                    }else{
                        this.$span.show();
                    }
                }
            };
    
            /**
             * 插件入口
             * 支持html5的,采用原生态支持,不做任何处理;不支持html5 placeholder的采用插件实现模式支持
             */
            if (!PlaceHolder.isSupportHtml5()) {
                return this.each(function(){
                    new PlaceHolder(this);
                });
            }else{
                return this;
            };
        }
    })(jQuery);
    复制代码
     
     
    分类: Jquery
  • 相关阅读:
    vue项目-百度地图-初始化展示覆盖范围(默认中心点和半径),点击切换中心点,地图落点(带数字)
    echarts地图下钻(全国到省)下钻一次
    JSON取值(key是中文或者数字)方式详解
    Chrome 80跨域cookie无法携带
    将博客搬至CSDN
    Django模板渲染,运行时如果报错:TemplateDoesNotExist at
    使用allure serve查看报告提示allure-results does not exists的解决方法
    jupyter lab不能自动打开浏览器和默认打开chrome浏览器的解决办法
    Chrome浏览器安装SwitchyOmega_Chromium插件,以及导入Burp Suite证书,抓取https请求包
    vue安装
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3430347.html
Copyright © 2020-2023  润新知