兩種方法基于jQuery實現IE瀏覽器兼容placeholder效果
placeholder是HTML5input的屬性之一,在不同的瀏覽器( 支持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:
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 = https://www.questions.com.cn/dnjc/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下顯示效果:
獲得焦點時:
失去焦點時:
有輸入時:
【兩種方法基于jQuery實現IE瀏覽器兼容placeholder效果】如果有朋友有更好的方法,歡迎交流討論 。
您可能感興趣的文章:使用jQuery快速解決input中placeholder值在ie中無法支持的問題IE下支持文本框和密碼框placeholder效果的JQuery插件分享基于jQuery的讓非HTML5瀏覽器支持placeholder屬性的代碼jQuery實現的一個自定義Placeholder屬性插件jQuery實現的placeholder效果完整實例jQuery插件EnPlaceholder實現輸入框提示文字jQuery實現HTML5 placeholder效果實例jquery實現(textarea)placeholder自動換行jquery 判斷是否支持Placeholder屬性的方法jQuery封裝placeholder效果實現方法,讓低版本瀏覽器支持該效果jQuery實現IE輸入框完成placeholder標簽功能的方法
