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

相關(guān)文章
網(wǎng)頁(yè)前臺(tái)通過(guò)js非法字符過(guò)濾代碼(罵人的話等等)
項(xiàng)目中如果需要過(guò)濾非法字符(你不想用戶輸入的任何字符)的話在前臺(tái)可以使用js過(guò)濾,同樣可以提高用戶體驗(yàn),以前都是后臺(tái)過(guò)濾,這樣雙重過(guò)濾用戶體驗(yàn)更好。2010-05-05javascript設(shè)置文本框光標(biāo)的方法實(shí)例小結(jié)
這篇文章主要介紹了javascript設(shè)置文本框光標(biāo)的方法,結(jié)合實(shí)例形式總結(jié)分析了javascript針對(duì)文本框光標(biāo)的位置、設(shè)置及文本操作的相關(guān)技巧,需要的朋友可以參考下2016-11-11layui 實(shí)現(xiàn)自動(dòng)選擇radio單選框(checked)的方法
今天小編就為大家分享一篇layui 實(shí)現(xiàn)自動(dòng)選擇radio單選框(checked)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09懶就要懶到底——鼠標(biāo)自動(dòng)點(diǎn)擊(含時(shí)間判斷)
懶就要懶到底——鼠標(biāo)自動(dòng)點(diǎn)擊(含時(shí)間判斷)...2007-02-02十分鐘打造AutoComplete自動(dòng)完成效果代碼
十分鐘打造山寨版谷歌AutoComplete,因?yàn)槭鞘昼姶蛟斐鰜?lái)的,所以只考慮表面效果,其他全部忽略,絕對(duì)的山寨。2009-12-12使用JavaScript實(shí)現(xiàn)表格編輯器(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇使用JavaScript實(shí)現(xiàn)表格編輯器(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08基于JavaScript實(shí)現(xiàn)一定時(shí)間后去執(zhí)行一個(gè)函數(shù)
在實(shí)際需要中可能需要規(guī)定在指定的時(shí)間之后再去執(zhí)行一個(gè)函數(shù)以達(dá)成期望的目的,這也就是一個(gè)定時(shí)器效果,本文給大家介紹基于JavaScript實(shí)現(xiàn)一定時(shí)間后去執(zhí)行一個(gè)函數(shù)的相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧2015-12-12用javascript實(shí)現(xiàn)鼠標(biāo)框選
用javascript實(shí)現(xiàn)鼠標(biāo)框選...2007-05-05