首頁  >  文章  >  web前端  >  兩種方法基於jQuery實作IE瀏覽器相容placeholder效果_jquery

兩種方法基於jQuery實作IE瀏覽器相容placeholder效果_jquery

WBOY
WBOY原創
2016-05-16 16:34:111003瀏覽

placeholder是HTML5的屬性之一,在不同的瀏覽器( 支援HTML5的現代瀏覽器 )中會有略微不同的顯示效果:

在Chrome( v31.0.1650.63 m)、Firefox( v21.0 )、360安全( v6.3 極速模式)中,輸入欄獲得焦點後,提示文字並不消失,如圖( Chrome ):

取得焦點前:

獲得焦點時:

偏偏IE11要搞點特殊:

取得焦點前:

獲得焦點時:

也就是說獲得焦點時提示的文字會消失。

非現代瀏覽器( 例如 IE6-IE9 )是不支援placeholder屬性的。現在用jQuery來讓這些非現代瀏覽器也同樣能實現placeholder的顯示效果,第一種方法實現的是IE11這種效果,也就是輸入框獲得焦點時提示文字會消失;如果要想獲得類似Chrome的效果,即輸入框獲得焦點時提示文字並不消失,可以使用第二種方法。

方法一

效果預覽:

http://jsfiddle.net/L57b25yr/embedded/result/

想法是,首先判斷瀏覽器是否支援placeholder屬性,如果不支援的話,就遍歷所有input輸入框,取得placeholder屬性的值填充進輸入框作為提示訊息,同時字體設定成灰色。

當輸入框獲得焦點( focus )同時輸入框內文字等於設定的提示訊息時,就把輸入框內清空;

當輸入框失去焦點( blur )同時輸入框內文字為空時,再把獲取的placeholder屬性的值填充進輸入框作為提示信息,同時字體設置成灰色;

當輸入框內有輸入( keydown )時,此時輸入框內的提示訊息已經由focus事件清除,此時只需要把字體再恢復成黑色即可。

此方法的缺點是,不適用於加載完DOM時即獲得焦點的輸入框,因為在用戶的角度,加載完頁面時看到的獲得焦點的那個輸入框,它的提示文字是看不到的。

HTML:

81e829c1c5c807e9eeaa9f1cbed12546

CSS:

.phcolor{ color:#999;}

JS:

$(function(){  

  //判断浏览器是否支持placeholder属性
  supportPlaceholder='placeholder'in document.createElement('input'),

  placeholder=function(input){

    var text = input.attr('placeholder'),
    defaultValue = input.defaultValue;

    if(!defaultValue){

      input.val(text).addClass("phcolor");
    }

    input.focus(function(){

      if(input.val() == text){
  
        $(this).val("");
      }
    });

 
    input.blur(function(){

      if(input.val() == ""){
      
        $(this).val(text).addClass("phcolor");
      }
    });

    //输入的字符不为灰色
    input.keydown(function(){
 
      $(this).removeClass("phcolor");
    });
  };

  //当浏览器不支持placeholder属性时,调用placeholder函数
  if(!supportPlaceholder){

    $('input').each(function(){

      text = $(this).attr("placeholder");

      if($(this).attr("type") == "text"){

        placeholder($(this));
      }
    });
  }

});

經過測試可以達到IE11placeholder的顯示效果。

方法二

此方法的想法是做一張含有提示文字的圖片作為input輸入框的背景圖,初始時獲得焦點同時載入背景圖;

背景圖如下:

當輸入框不為空時,去掉背景圖;

當輸入框為空時,載入背景圖;

當使用者鍵盤按鍵且輸入框不為空( 輸入字元 )時,去掉背景圖;

當使用者鍵盤按鍵且輸入框為空( 刪除字元 )時,載入背景圖。

此方法的缺點是:需要為每個提示文字不同的input製作背景圖片,並且設定input的樣式。

HTML程式碼不變。

CSS:

.phbg{ background:url(img/bg.jpg) 0 0 no-repeat;}

JS:

$(function(){  

   //判断浏览器是否支持placeholder属性
   supportPlaceholder='placeholder' in document.createElement('input');

   if(!supportPlaceholder){

     //初始状态添加背景图片
     $("#uname").attr("class","phbg");
     //初始状态获得焦点
     $("#uname").focus;

     function destyle(){
     
      if($("#uname").val() != ""){
        
        $("#uname").removeClass("phbg");
      }else{
      
        $("#uname").attr("class","phbg");
       }
     }
     
     //当输入框为空时,添加背景图片;有值时去掉背景图片
     destyle();

     $("#uname").keyup(function(){

      //当输入框有按键输入同时输入框不为空时,去掉背景图片;有按键输入同时为空时(删除字符),添加背景图片
      destyle();
     });

     $("#uname").keydown(function(){
     
      //keydown事件可以在按键按下的第一时间去掉背景图片
      $("#uname").removeClass("phbg");
     });
   }
});

此方法至此結束。

此方法在IETester的IE8下顯示效果:

獲得焦點時:

失去焦點時:

有輸入時:

如果有朋友有更好的方法,歡迎交流討論。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn