HTML5裏面一個非常不錯的擴展功能就是可以在文本框上面增加佔位文本。佔位文本(PlaceHolder)是指當一個文本框沒有被focus的時候顯示的是提示文字,當他被點擊之後就顯示空白。這個功能很不錯,但是並不是所有的瀏覽器都支持。這篇文章就來討論一下怎樣用比較簡單的方法可以讓所有瀏覽器都支持這個特性。
傳統的解決辦法
在我們有這個屬性之前,我們一般是通過Javascript來實現這個效果。 這段文字被設置在value屬性裏面,當聚焦了之後,檢驗文本框的值是否等於默認值,如果是則清空文本框。當文本框失去焦點的時候,再檢查是否爲空,爲空則再寫上默認值。這個方法很不高效,而且每個文本框都得去檢測。
{this.value = '';}" onblur="if (this.value == '') {this.value = 'Search';}">
jQueyr 佔位文本
現在有了HTML5之後,通過placeholder屬性來設置就比value設置語義化的多了。然而,這個屬性並不是所有的瀏覽器都支持,所以我們需要jQuery和Modernizr的支持。
在這裏Modernizr是用來檢測瀏覽器是否支持一些HTML5屬性的。如果瀏覽器不支持,那麼再運行jQuery代碼。它會先找到所有帶PlaceHolder屬性的元素,然後存儲在一個變量中。然後會將元素的value和這個變量對比,如果爲空則顯示placeholder裏面的內容,並且會增加一個”placeholder”的css樣式。
如果你想在你的網站中使用這個東西,需要引入jQuery和Modernizr,注意放置在合適的路徑下,然後把下面的代碼複製進去。
<script src="modernizr.js"></script>
$(document).ready(function(){
if(!Modernizr.input.placeholder){
$('[placeholder]').focus(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
input.removeClass('placeholder');
}
}).blur(function() {
var input = $(this);
if (input.val() == '' || input.val() == input.attr('placeholder')) {
input.addClass('placeholder');
input.val(input.attr('placeholder'));
}
}).blur();
$('[placeholder]').parents('form').submit(function() {
$(this).find('[placeholder]').each(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
}
})
});
}
</script>
去除Webkit搜索框樣式
Webkit內核的瀏覽器會給搜索框增加一些額外的樣式,通過下面的CSS可以去掉這個樣式:
-webkit-appearance: none;
}
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
display: none;
}