摘要:方法一效果預覽思路是,首先判斷瀏覽器是否支持屬性,如果不支持的話,就遍歷所有輸入框,獲取屬性的值填充進輸入框作為提示信息,同時字體設置成灰色。
placeholder是HTML5的屬性之一,在不同的瀏覽器( 支持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屬性的值填充進輸入框作為提示信息,同時字體設置成灰色。
當輸入框獲得焦點( focus )同時輸入框內文字等于設置的提示信息時,就把輸入框內清空;
當輸入框失去焦點( blur )同時輸入框內文字為空時,再把獲取的placeholder屬性的值填充進輸入框作為提示信息,同時字體設置成灰色;
當輸入框內有輸入( keydown )時,此時輸入框內的提示信息已經由focus事件清除,此時只需要把字體再恢復成黑色即可。
此方法的缺點是,不適用于加載完DOM時即獲得焦點的輸入框,因為在用戶的角度,加載完頁面時看到的獲得焦點的那個輸入框,它的提示文字是看不到的。
HTML:
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下顯示效果:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/82423.html
摘要:經過不斷的嘗試和參考別的產品在下兼容處理。我整理下,具體見下兼容處理通過處理時和時來控制文本的顯示和隱藏。其中關鍵的時和。在父子元素中生效,需要在父級元素設置手機號郵箱密碼希望能夠對大家有幫助。 寫在前面 由于公司的產品需要兼容 IE8 瀏覽器,在做登陸時,發現一個問題,placeholder 在input = text 情況下,顯示還算正常,但在 input = password 就...
摘要:經過不斷的嘗試和參考別的產品在下兼容處理。我整理下,具體見下兼容處理通過處理時和時來控制文本的顯示和隱藏。其中關鍵的時和。在父子元素中生效,需要在父級元素設置手機號郵箱密碼希望能夠對大家有幫助。 寫在前面 由于公司的產品需要兼容 IE8 瀏覽器,在做登陸時,發現一個問題,placeholder 在input = text 情況下,顯示還算正常,但在 input = password 就...
摘要:經過不斷的嘗試和參考別的產品在下兼容處理。我整理下,具體見下兼容處理通過處理時和時來控制文本的顯示和隱藏。其中關鍵的時和。在父子元素中生效,需要在父級元素設置手機號郵箱密碼希望能夠對大家有幫助。 寫在前面 由于公司的產品需要兼容 IE8 瀏覽器,在做登陸時,發現一個問題,placeholder 在input = text 情況下,顯示還算正常,但在 input = password 就...
閱讀 1002·2021-10-25 09:45
閱讀 3561·2021-09-22 14:58
閱讀 4280·2021-08-31 09:43
閱讀 1103·2019-08-30 15:55
閱讀 1058·2019-08-29 13:51
閱讀 1383·2019-08-29 13:02
閱讀 3620·2019-08-29 12:52
閱讀 2099·2019-08-26 13:27