jQuery placeholder插件

原创
2013/02/16 17:34
阅读数 1.5K

以前公司有这样的效果,placeholder和以前那种js模拟value的有一些区别,以前的那种都是在input文本框获得焦点的时候就消失了,而 html5引入的placeholder则不是,当获得焦点的时候是不消失的只有在你输入内容的时候才消失,当然因为一些低级浏览器不支持这个属性,当然 代表是IE浏览器,貌似IE9还不支持呢,其是模拟的思路也是比较简单的,就是在不支持的浏览器上创建一个label来模拟placeholder,具体 的大家可以看看源代码,因为说很苍白,看了代码就都明白了,当然难点可能是在于两个方法,一个是oninut和onpropertychange,当然你 可以开定时器来获取,当然那样我认为性能太差,但是兼容性最好~好了不说直接上代码了~

;(function ($) {
    $.fn.placeholder = function (options) {
        var defaults = {
            pColor: "#333",
            pActive: "#999",
            pFont: "14px",
            activeBorder: "#080",
            posL: 8,
            zIndex: "99"
        },
        opts = $.extend(defaults, options);
        //
        return this.each(function () {
            if ("placeholder" in document.createElement("input")) return;
            $(this).parent().css("position", "relative");
            var isIE = $.browser.msie,
            version = $.browser.version;
 
            //不支持placeholder的浏览器
            var $this = $(this),
                msg = $this.attr("placeholder"),
                iH = $this.outerHeight(),
                iW = $this.outerWidth(),
                iX = $this.position().left,
                iY = $this.position().top,
                oInput = $("<label>", {
                "class": "test",
                "text": msg,
                "css": {
                    "position": "absolute",
                    "left": iX + "px",
                    "top": iY + "px",
                    "width": iW - opts.posL + "px",
                    "padding-left": opts.posL + "px",
                    "height": iH + "px",
                    "line-height": iH + "px",
                    "color": opts.pColor,
                    "font-size": opts.pFont,
                    "z-index": opts.zIndex,
                    "cursor": "text"
                }
                }).insertBefore($this);
            //初始状态就有内容
            var value = $this.val();
            if (value.length > 0) {
            oInput.hide();
            };
 
            //
            $this.on("focus", function () {
                var value = $(this).val();
                if (value.length > 0) {
                    oInput.hide();
                }
                oInput.css("color", opts.pActive);
                //
 
                if(isIE && version < 9){
                    var myEvent = "propertychange";
                }else{
                    var myEvent = "input";
                }
 
                $(this).on(myEvent, function () {
                    var value = $(this).val();
                    if (value.length == 0) {
                        oInput.show();
                    } else {
                        oInput.hide();
                    }
                });
 
            }).on("blur", function () {
                var value = $(this).val();
                if (value.length == 0) {
                    oInput.css("color", opts.pColor).show();
                }
            });
            //
            oInput.on("click", function () {
                $this.trigger("focus");
                $(this).css("color", opts.pActive)
            });
            //
            $this.filter(":focus").trigger("focus");
        });
    }
})(jQuery);

展开阅读全文
打赏
0
6 收藏
分享
加载中
思路不错,相互学习
我也有一个这个放在github上
https://github.com/smglg/placeholder

2013/02/28 18:07
回复
举报
谢谢!
2013/02/18 18:45
回复
举报
wyysf博主

引用来自“lamp小强”的评论

不错,呵呵,我的技术微刊:http://kan.weibo.com/kan/3530383472415784

呵呵,我看过很不错~
2013/02/17 10:12
回复
举报
不错,呵呵,我的技术微刊:http://kan.weibo.com/kan/3530383472415784
2013/02/17 09:51
回复
举报
更多评论
打赏
4 评论
6 收藏
0
分享
返回顶部
顶部