跨浏览器实现placeholder效果的jQuery插件

曾经遇到这样一个问题,处理IE8密码框placeholder属性兼容性。几经周折,这个方案是可以解决问题的。

1、jsp页面引入js插件

<script type="text/javascript" src="<%=basePath%>/login.js" ></script>

2、页面初始化代码

<script type="text/javascript">
//input提示信息 效果插件 针对ie8处理
 $(function() {
        if(!(‘placeholder‘ in document.createElement(‘input‘))){ 

            $(‘#password‘).placeholder({isUseSpan:true});
        }

    });

</script>

3、页面标签代码

<input id="password" name="j_password" class="input_text input_open" placeholder="请输入密码" type="password"  >

4、插件placeholder.js

/**
 * jQuery EnPlaceholder plug
 * 跨浏览器实现placeholder效果的jQuery插件
 * version 1.0
 * }
 */
 //
//  var defaultValue = "账号";
(function ($) {
    $.fn.extend({
        "placeholder":function (options) {
            options = $.extend({
                placeholderColor:‘#BABABA‘,    //#ACA899
                isUseSpan:false, //是否使用插入span标签模拟placeholder的方式,默认false,默认使用value模拟
                onInput:true  //使用标签模拟(isUseSpan为true)时,是否绑定onInput事件取代focus/blur事件
            }, options);  

            $(this).each(function () {
                var _this = this;
                var supportPlaceholder = ‘placeholder‘ in document.createElement(‘input‘);
                if (!supportPlaceholder) {
                    var defaultValue = $(_this).attr(‘placeholder‘);
                    //修正无placeholder时,显示undefined问题
                    if(defaultValue != null && typeof(defaultValue) != "undefined"){
                        var defaultColor = $(_this).css(‘color‘);
                        if (options.isUseSpan == false) {
                            $(_this).focus(function () {
                                var pattern = new RegExp("^" + defaultValue + "$|^$");
                                pattern.test($(_this).val()) && $(_this).val(‘‘).css(‘color‘, defaultColor);
                            }).blur(function () {
                                    if ($(_this).val() == defaultValue) {
                                        $(_this).css(‘color‘, defaultColor);
                                    } else if ($(_this).val().length == 0) {
                                        $(_this).val(defaultValue).css(‘color‘, options.placeholderColor);
                                    }
                                }).trigger(‘blur‘);
                        } else {
                            var $imitate = $(‘<span class="wrap-placeholder" style="position:absolute; left:85px; display:inline-block; overflow:hidden; color:‘+options.placeholderColor+‘; width:‘+$(_this).outerWidth()+‘px; height:‘+$(_this).outerHeight()+‘px;">‘ + defaultValue + ‘</span>‘);
                            $imitate.css({
                                ‘margin-left‘:$(_this).css(‘margin-left‘),
                                ‘margin-top‘:$(_this).css(‘margin-top‘),
                                ‘font-size‘:$(_this).css(‘font-size‘),
                                ‘font-family‘:$(_this).css(‘font-family‘),
                                ‘font-weight‘:$(_this).css(‘font-weight‘),
                                ‘padding-left‘:parseInt($(_this).css(‘padding-left‘)) + 2 + ‘px‘,
                                ‘line-height‘:_this.nodeName.toLowerCase() == ‘textarea‘ ? $(_this).css(‘line-weight‘) : $(_this).outerHeight() + ‘px‘,
                                ‘padding-top‘:_this.nodeName.toLowerCase() == ‘textarea‘ ? parseInt($(_this).css(‘padding-top‘)) + 2 : 0
                            });
                            $(_this).before($imitate.click(function () {
                                $(_this).trigger(‘focus‘);
                            }));  

                            $(_this).val().length != 0 && $imitate.hide();  

                            if (options.onInput) {
                                //绑定oninput/onpropertychange事件
                                var inputChangeEvent = typeof(_this.oninput) == ‘object‘ ? ‘input‘ : ‘propertychange‘;
                                $(_this).bind(inputChangeEvent, function () {
                                    $imitate[0].style.display = $(_this).val().length != 0 ? ‘none‘ : ‘inline-block‘;
                                });
                            } else {
                                $(_this).focus(function () {
                                    $imitate.hide();
                                }).blur(function () {
                                        /^$/.test($(_this).val()) && $imitate.show();
                                    });
                            }
                        }
                    }
                }
            });
            return this;
        }
    });
})(jQuery);   

5、GAME OVER

原文地址:https://www.cnblogs.com/city-light/p/8434597.html

时间: 2024-10-11 07:37:52

跨浏览器实现placeholder效果的jQuery插件的相关文章

实现跨浏览器CSS3 transitions效果的jQuery插件

tram.js是一款实现跨浏览器CSS3 transitions效果的jQuery插件.tram.js旨在提高CSS3 transition的性能和灵活性,并通过jQuery来定义它们.tram.js提供强大的API来实现auto-stopping.sequencing和跨浏览器等功能. 当该jquery插件首次加载时,它将使用特性检测来判断浏览器是否支持CSS transitions.如果浏览器支持,Tram将管理样式并有浏览器来执行CSS3动画.如果浏览器不支持,Tram将使用自己的补间动画

跨浏览器的placeholder-jQuery版(jQuery插件EnPlaceholder)

案例:整搜索框,需要默认占位符为"请输入关键词",获取焦点时,占位符消失或不可用(不影响正常输入),丢失焦点后,若用户无内容输入,占位符继续出现,继续占位.这种代码我想前端们已经很容易就写出来了吧,现在HTML5原生就有这个"placeholder"属性,效果与上边案例描述的一样(各支持的浏览器内部表现可能不一致,但是作用是一致的),那么这一属性该怎么优雅降级到支持所有现代浏览器呢?答案还是脚本即JavaScript. 上述案例的一个图例:     下面我们就使用

IE下支持文本框和密码框placeholder效果的JQuery插件

基于jQuery实现的,主要用于IE下实现placeholder效果,可同时支持文本和密码输入框.placeholder是HTML5新增的一个属性,当input设置了该属性后,该值的内容将作为灰色提示显示在文本框中,当文本框获得焦点时,提示文字消失. 实现代码如下: (function($) {  /**   * 没有开花的树   * 2012/11/28 15:12   */ var placeholderfriend = {    focus: function(s) {      s =

【jquery】基于 jquery 实现 ie 浏览器兼容 placeholder 效果

placeholder 是 html5 新增加的属性,主要提供一种提示(hint),用于描述输入域所期待的值.该提示会在输入字段为空时显示,并会在字段获得焦点时消失.placeholder 属性适用于以下类型的 input 标签:text, search, url, telephone, email 以及 password. 我们先看下在谷歌浏览器中的效果,如图所示: 获得焦点时: 输入字段: 因为是 html5 属性,自然低版本的浏览器比如 ie6-8 不兼容.下面就介绍下如何在低版本浏览器中

跨浏览器的placeholder – 原生JS版

转自来源 : http://www.ifrans.cn/placehoder/ 跨浏览器的placeholder – 原生JS版 html5为input元素新增了一个属性”placeholder”,提供对输入字段预期值的提示信息,input为空且未获得焦点时显示,获得焦点时消失,非常实用.目前,大部分现代浏览器都对placeholder属性提供了支持,IE10也是支持的.如果需要使IE6~IE9等浏览器支持placeholder,只有借助js了. 在这些不支持原生placeholder属性的浏览

javascript设计模式实践之迭代器--具有百叶窗切换图片效果的JQuery插件(一)

类似于幻灯片的切换效果,有时需要在网页中完成一些图片的自动切换效果,比如广告,宣传,产品介绍之类的,那么单纯的切就没意思了,需要在切换的时候通过一些效果使得切换生动些. 比较常用之一的就是窗帘切换了. 先贴上完成的效果. 实现原理不复杂,在动的一条一条的称之为“窗帘条”或者是“strip”,每一个strip都是一个div,类似于雪碧图的方式将其背景图的位置设置为strip的可视位置,然后用jquery的animate让他们按照一定规律动起来就完成窗帘切换效果了. 为了使用方便,将这个功能作为jq

javascript设计模式实践之职责链--具有百叶窗切换图片效果的JQuery插件(三)

在上一篇<javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)>里,通过采用模板方法模式完成了切换效果对象的构建编写. 接下来就是完成各效果对象的调用和联动. 切换要求:当前图片显示指定时间后执行切换效果并切换下一张图片,最后一个切换后从头开始. 按照要求一个效果对象完成后要执行下一个,最后一个完成后要从头开始, 看上去就是一个带状态通知的环形列表,类似于这样的特征,可以采用职责链模式来构建. 职责链就是由不同的功能处理构成的链表,每一个功能处理作为一个

jQuery 实现IE10以下浏览器的placeholder效果

/* *jQuery版本:jQuery-1.8.3.min.js *测试的浏览器:IE8,IETester下的IE6-IE9 */ placeholder是HTML5<input>的属性之一,在不同的浏览器中会有不同的显示效果: 在Chrome( v31.0.1650.63 m).Firefox( v21.0 ).360安全( v6.3 极速模式 )中,输入栏获得焦点后,提示文字并不消失,如图( Chrome ): 获得焦点前: 获得焦点时: 偏偏IE11要搞点特殊: 获得焦点前: 获得焦点时

Html5添加三联切换仿3D效果旋转木马jQuery插件教程

一.使用方法 <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/gallery.js"></script> 二.Html结构 <div id="wrapper"> <div id=&quo