DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript綜合知識 >> 兩種方法基於jQuery實現IE浏覽器兼容placeholder效果
兩種方法基於jQuery實現IE浏覽器兼容placeholder效果
編輯:JavaScript綜合知識     

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

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

獲得焦點前:

兩種方法基於jQuery實現IE浏覽器兼容placeholder效果

獲得焦點時:

偏偏IE11要搞點特殊:

獲得焦點前:

獲得焦點時:

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

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

方法一

效果預覽:

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

思路是,首先判斷浏覽器是否支持placeholder屬性,如果不支持的話,就遍歷所有input輸入框,獲取placeholder屬性的值填充進輸入框作為提示信息,同時字體設置成灰色。

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

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

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

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

HTML:

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

CSS:

.phcolor{ color:#999;}

JS:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 $(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:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 $(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下顯示效果:

獲得焦點時:

失去焦點時:

有輸入時:

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

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved