占位符placeholder的益處不用多說,但是很不幸的是,在IE8之前的瀏覽器里是無法實現placeholder這一屬性的,所以在需要兼容IE8之前的瀏覽器的情況下,我們不得不想辦法模擬實現placeholder屬性。
在前面的一篇文中《獲取表單的初始值,模擬placeholder屬性》中,就曾經講過placeholder屬性的模擬,這里再翻出來一遍,是因為又遇到了新的問題。
當輸入值之后,再刷新頁面,在火狐瀏覽器中,獲取到的defaultValue會是新的輸入值。
直接以之前的項目中一小段代碼為例:
<ul class="query-box">
<li><input type="text" value="請輸入8位准考證號" placeholder="請輸入8位准考證號" tabindex="1"></li>
<li class="img-verification">
<input type="text" value="請輸入驗證碼" placeholder="請輸入驗證碼" tabindex="2">
<div><img src="images/logo.png" alt=""></div>
</li>
<li>
<button tabindex="3">查詢</button>
</li>
</ul>
該項目需要兼容到IE8,所以這里就必須解決IE8不支持placeholder這一屬性的問題。項目中使用了jquery。
最開始的想法,就是使用初始值的方法,但是在火狐瀏覽器中測試時,發現了bug,當輸入值之后,再刷新頁面,火狐瀏覽器會記住所輸入的值,作為初始值,導致不能完全模擬placeholder。只能轉換方向,還是直接使用jquery方法來解決吧!
var permissionNum = /^\d{8}$/;
$(".query-box").find("input[type=text]").each(function (index, item) {
var defaultVal = $(this).prop('placeholder');
$(this).on("focus keydown", function () {
var val = $(this).val();
if (val == defaultVal) {
$(this).val("").css("color", "#448aca");
}
}).on("blur keyup", function () {
var val = $(this).val();
if (val == "") {
$(this).val(defaultVal).css("color", "#bababa");
}
// 校驗准考證號碼,符合8位數字,就高亮查詢按鈕
if (index == 0) {
var $target = $(this).parents(".query-box").find("button");
permissionNum.test(val) ? $target.addClass("active") : $target.removeClass("active");
}
})
});
也沒有什么高深的東西,只要能轉過這個彎來就可以了!
