淘寶搜索框效果實現(xiàn)分析
淘寶的搜索框就用到了這樣一種設(shè)計:
這種設(shè)計一般是用javascript監(jiān)控了輸入框的focus和blur事件:
<input type="text" id="q" value="請輸入關(guān)鍵字" />
<script type="text/javascript">//<![CDATA[
$("#q").onfocus = function() {
if ("請輸入關(guān)鍵字" == this.value) {
this.value = "";
}
};
$("#q").onblur = function() {
if ("" == this.value) {
this.value = "請輸入關(guān)鍵字";
}
};
//]]></script>
這段代碼有兩個很明顯的缺點:
- “請輸入關(guān)鍵字”這段提示共出現(xiàn)了3次,一旦要改這段文字就得改3個地方,維護顯得非常不便。
- 為了性能優(yōu)化,我們會把javascript部分放到頁面末尾。然而,像門戶網(wǎng)站首頁這種代碼量很大的頁面,末尾的javascript很可能會延時1-2秒執(zhí)行。在這段時間內(nèi),即使焦點在輸入框內(nèi),提示文字也不會消失,用戶需要手動刪除這段文字再輸入內(nèi)容。
淘寶的輸入框則采取了另一種做法,它不把這段提示文字作為輸入框的value值,而是放在另一個標簽內(nèi),再用絕對定位把這段文字疊到輸入框上:
從上面的代碼可以看到,提示文字在label標簽內(nèi),這樣做有兩個好處:
- 良好的結(jié)構(gòu)性。既不是div不是span,對input的說明就應(yīng)該用label。
- 良好的用戶體驗。由于設(shè)置了for屬性,當用戶點擊label的時候,就會自動focus到輸入框。
javascript要控制的其實就是label的顯示和隱藏,再也不需要管那段提示文字的內(nèi)容了:
$("#q").onfocus = function() {
$("label[for=q]")[0].style.display = 'none';
};
$("#q").onblur = function() {
if ("" == this.value) {
$("label[for=q]")[0].style.display = '';
}
};
javascript是簡潔了,但用戶體驗呢?在javascript執(zhí)行前,那段提示文字也是無論如何都不會消失,用戶也是想刪掉這段文字,但是他們刪不了,因為這些文字實際上并不在輸入框內(nèi),而他們輸入的內(nèi)容會被提示文字擋住了。我個人認為這給用戶帶來了很大的疑惑。

相關(guān)文章
網(wǎng)頁前臺通過js非法字符過濾代碼(罵人的話等等)
項目中如果需要過濾非法字符(你不想用戶輸入的任何字符)的話在前臺可以使用js過濾,同樣可以提高用戶體驗,以前都是后臺過濾,這樣雙重過濾用戶體驗更好。2010-05-05javascript設(shè)置文本框光標的方法實例小結(jié)
這篇文章主要介紹了javascript設(shè)置文本框光標的方法,結(jié)合實例形式總結(jié)分析了javascript針對文本框光標的位置、設(shè)置及文本操作的相關(guān)技巧,需要的朋友可以參考下2016-11-11layui 實現(xiàn)自動選擇radio單選框(checked)的方法
今天小編就為大家分享一篇layui 實現(xiàn)自動選擇radio單選框(checked)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09使用JavaScript實現(xiàn)表格編輯器(實例講解)
下面小編就為大家?guī)硪黄褂肑avaScript實現(xiàn)表格編輯器(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08基于JavaScript實現(xiàn)一定時間后去執(zhí)行一個函數(shù)
在實際需要中可能需要規(guī)定在指定的時間之后再去執(zhí)行一個函數(shù)以達成期望的目的,這也就是一個定時器效果,本文給大家介紹基于JavaScript實現(xiàn)一定時間后去執(zhí)行一個函數(shù)的相關(guān)知識,感興趣的朋友一起學習吧2015-12-12