placeholder的兼容處理

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

在Chrome( v31.0.1650.63 m)、Firefox( v21.0 )、360安全( v6.3 極速模式 )中,輸入欄得到焦點後,提示文字並不消失,如圖( Chrome ):
圖片描述
也就是說得到焦點時提示的文字會消失。
非現代瀏覽器( 例如 IE6-IE9 )是不支持placeholder屬性的。如今用jQuery來使這些非現代瀏覽器也一樣能能實現placeholder的顯示效果,第一種方法實現的是IE11這種效果,也就是輸入框得到焦點時提示文字會消失;若是要想得到相似Chrome的效果,即輸入框得到焦點時提示文字並不消失,可使用第二種方法。安全

方法一函數

效果預覽:測試

http://jsfiddle.net/L57b25yr/...字體

思路是,首先判斷瀏覽器是否支持placeholder屬性,若是不支持的話,就遍歷全部input輸入框,獲取placeholder屬性的值填充進輸入框做爲提示信息,同時字體設置成灰色。this

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

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

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

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

HTML:

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

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下顯示效果:

圖片描述

相關文章
相關標籤/搜索