国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery封裝placeholder效果實(shí)現(xiàn)方法,讓低版本瀏覽器支持該效果

2019-11-19 16:07:45
字體:
供稿:網(wǎng)友

頁面中的輸入框默認(rèn)的提示文字一般使用placeholder屬性就可以了,即:

<input type="text" name="username" placeholder="請輸入用戶名" value="" id="username"/>

最多加點(diǎn)樣式控制下默認(rèn)文字的顏色

input::-webkit-input-placeholder{color:#AAAAAA;}

但是在低版本的瀏覽器卻不支持這個placeholder屬性,那么真的要在低版本瀏覽器也要實(shí)現(xiàn)跟placeholder一樣的效果,就需要寫個插件來兼容下,下面就細(xì)講一下怎樣用jquery來實(shí)現(xiàn)這個模擬效果。

實(shí)現(xiàn)這個模擬效果,頁面的一般調(diào)用方式:

$('input').placeholder();

首先,先寫jquery插件的一般結(jié)構(gòu):

;(function($){  $.fn.placeholder = function(){    //實(shí)現(xiàn)placeholder的代碼  }})(jQuery)

下面我們就要判斷瀏覽器是否支持placeholder屬性。

;(function($){  $.fn.placeholder = function(){    this.each(function(){      var _this = this;      var supportPlaceholder = 'placeholder' in document.createElement('input');      if(!supportPlaceholder){        //不支持placeholder屬性的操作      }    });  }})(jQuery)

我們要支持鏈?zhǔn)讲僮鳎缦拢?/p>

;(function($){  $.fn.placeholder = function(){     return this.each(function(){      var _this = this;      var supportPlaceholder = 'placeholder' in document.createElement('input');      if(!supportPlaceholder){        //不支持placeholder屬性的操作      }    });  }})(jQuery)

默認(rèn)配置項(xiàng):

options = $.extend({  placeholderColor:'#aaaaaa',  isSpan:false, //是否使用插入span標(biāo)簽?zāi)Mplaceholder的方式,默認(rèn)是不需要  onInput:true //實(shí)時監(jiān)聽輸入框},options);

如果不需要通過span來模擬placeholder效果,那么就需要通過輸入框的value值來判斷,如下代碼:

if(!options.isSpan){  $(_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');}

如果需要同span標(biāo)簽來模擬placeholder效果,代碼如下:

var $simulationSpan = $('<span class="wrap-placeholder">'+defaultValue+'</span>');$simulationSpan.css({  'position':'absolute',  'display':'inline-block',  'overflow':'hidden',  'width':$(_this).outerWidth(),  'height':$(_this).outerHeight(),  'color':options.placeholderColor,  'margin-left':$(_this).css('margin-left'),  'margin-top':$(_this).css('margin-top'),  'padding-left':parseInt($(_this).css('padding-left')) + 2 + 'px',  'padding-top':_this.nodeName.toLowerCase() == 'textarea' ? parseInt($(_this).css('padding-top')) + 2 : 0,  'line-height':_this.nodeName.toLowerCase() == 'textarea' ? $(_this).css('line-weight') : $(_this).outerHeight() + 'px',  'font-size':$(_this).css('font-size'),  'font-family':$(_this).css('font-family'),  'font-weight':$(_this).css('font-weight')});//通過before把當(dāng)前$simulationSpan添加到$(_this)前面,并讓$(_this)聚焦$(_this).before($simulationSpan.click(function () {  $(_this).trigger('focus');}));//當(dāng)前輸入框聚焦文本內(nèi)容不為空時,模擬span隱藏$(_this).val().length != 0 && $simulationSpan.hide();if (options.onInput) {  //綁定oninput/onpropertychange事件  var inputChangeEvent = typeof(_this.oninput) == 'object' ? 'input' : 'propertychange';  $(_this).bind(inputChangeEvent, function () {    $simulationSpan[0].style.display = $(_this).val().length != 0 ? 'none' : 'inline-block';  });}else {  $(_this).focus(function () {    $simulationSpan.hide();  }).blur(function () {    /^$/.test($(_this).val()) && $simulationSpan.show();  });};

整體代碼

;(function($){  $.fn.placeholder = function(options){    options = $.extend({      placeholderColor:'#aaaaaa',      isSpan:false, //是否使用插入span標(biāo)簽?zāi)Mplaceholder的方式,默認(rèn)是不需要      onInput:true //實(shí)時監(jiān)聽輸入框    },options);     return this.each(function(){      var _this = this;      var supportPlaceholder = 'placeholder' in document.createElement('input');      if(!supportPlaceholder){        //不支持placeholder屬性的操作        var defaultValue = $(_this).attr('placeholder');        var defaultColor = $(_this).css('color');        if(!options.isSpan){          $(_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 $simulationSpan = $('<span class="wrap-placeholder">'+defaultValue+'</span>');          $simulationSpan.css({            'position':'absolute',            'display':'inline-block',            'overflow':'hidden',            'width':$(_this).outerWidth(),            'height':$(_this).outerHeight(),            'color':options.placeholderColor,            'margin-left':$(_this).css('margin-left'),            'margin-top':$(_this).css('margin-top'),            'padding-left':parseInt($(_this).css('padding-left')) + 2 + 'px',            'padding-top':_this.nodeName.toLowerCase() == 'textarea' ? parseInt($(_this).css('padding-top')) + 2 : 0,            'line-height':_this.nodeName.toLowerCase() == 'textarea' ? $(_this).css('line-weight') : $(_this).outerHeight() + 'px',            'font-size':$(_this).css('font-size'),            'font-family':$(_this).css('font-family'),            'font-weight':$(_this).css('font-weight')          });          //通過before把當(dāng)前$simulationSpan添加到$(_this)前面,并讓$(_this)聚焦          $(_this).before($simulationSpan.click(function () {            $(_this).trigger('focus');          }));          //當(dāng)前輸入框聚焦文本內(nèi)容不為空時,模擬span隱藏          $(_this).val().length != 0 && $simulationSpan.hide();          if (options.onInput) {            //綁定oninput/onpropertychange事件            var inputChangeEvent = typeof(_this.oninput) == 'object' ? 'input' : 'propertychange';            $(_this).bind(inputChangeEvent, function () {              $simulationSpan[0].style.display = $(_this).val().length != 0 ? 'none' : 'inline-block';            });          }else {            $(_this).focus(function () {              $simulationSpan.hide();            }).blur(function () {              /^$/.test($(_this).val()) && $simulationSpan.show();            });          };        }      }    });  }})(jQuery);

調(diào)用方式,需要通過span標(biāo)簽來模擬的話:

$("#username").placeholder({  isSpan:true});

以上這篇jQuery封裝placeholder效果實(shí)現(xiàn)方法,讓低版本瀏覽器支持該效果就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 濮阳市| 全南县| 济源市| 济源市| 衡阳县| 镇远县| 陆丰市| 阿拉善右旗| 策勒县| 揭东县| 双柏县| 内黄县| 个旧市| 蕲春县| 新营市| 济阳县| 仪陇县| 巧家县| 宾阳县| 岢岚县| 镇沅| 内江市| 九江市| 屏南县| 夹江县| 合山市| 神农架林区| 汕尾市| 潞西市| 海阳市| 买车| 霸州市| 浑源县| 基隆市| 肃南| 隆化县| 陆良县| 富宁县| 郸城县| 新丰县| 广平县|