谷歌音樂搜索欄的提示功能php修正代碼
問題描述
在加載頁面的時候, 將光標(biāo)快速定位到搜索欄上, 待頁面加載完成, 搜索欄進(jìn)行初始化后會顯示搜索提示. 此時輸入的任何內(nèi)容將成為搜索提示的一部分而不是搜索關(guān)鍵字. 截圖如下:
導(dǎo)致原因
搜索欄的 JavaScript 初始化執(zhí)行在 onload 的時候. 因?yàn)轫撁鎴D片請求多, 完全加載需要 3 秒鐘左右, 并且搜索欄的 tabindex 被設(shè)為 1, 搜索優(yōu)先的用戶很容易就能遇到.
以下是我根據(jù)自己的理解反編譯出來的 JS 代碼, 頁面在 onload 的時候?qū)?zhí)行 m.hint.initHint 方法為搜索框添加提示功能.
/**
* 為搜索框添加提示功能
* @param searchTip 提示信息
* @param searchBoxId 搜索輸入框 ID
* @param hideBoxId 關(guān)鍵字隱藏框 ID
*/
m.hint.initHint = function(searchTip, searchBoxId, hideBoxId){
var searchBox = document.getElementById(searchBoxId);
var hideBox = null;
if(searchBox){
if(hideBoxId) {
hideBox = document.getElementById(hideBoxId);
}
l.events.listen(searchBox, "blur", l.bind(m.hint.onInputBlur, null, searchBox, hideBox), false);
l.events.listen(searchBox, "focus", l.bind(m.hint.onInputFocus, null, searchBox, hideBox), false);
if(hideBox){
l.events.listen(searchBox, "change", bind(m.hint.onInputChange, null, searchBox, hideBox), false);
hideBox.value = m.hint.getInputValue(searchBox);
}
// 在這里將搜索提示賦給臨時變量
m.hint.Gh[searchBox] = searchTip;
// 如果搜索框存在, 則為搜索框加上臨時變量和灰色字的 class
m.hint.onInputBlur(searchBox);
}
};
m.hint.onInputBlur = function(searchBox, hideBox) {
m.hint.fi(searchBox);
hideBox && m.hint.onInputChange(searchBox, hideBox);
};
m.hint.fi = function(searchBox) {
if(searchBox) {
var searchTip = m.hint.Gh[searchBox];
if(searchTip && (searchBox.value.trim()=="" || searchBox.value==searchTip)) {
searchBox.setAttribute(m.hint.IS_HINT, "1");
searchBox.className += " hint";
searchBox.value = searchTip;
}
}
};
解決辦法
縮短搜索框 DOM 節(jié)點(diǎn)加載和 JavaScript 初始化之間的時間. 可以在搜索框加載完成后立刻執(zhí)行 JS, 反正 Google 自己的產(chǎn)品也不需要 SEO. 當(dāng)然, 最好在 DOM ready 的時候執(zhí)行.
擴(kuò)展知識
記得我寫過一篇文章, 介紹如何在 WordPress 搜索框添加文字提示. 我的處理辦法簡單粗暴, 僅以框內(nèi)關(guān)鍵字來判斷是關(guān)鍵字還是提示信息. (所以我的提示信息很長)
在分析這個案例的過程中, 我發(fā)現(xiàn) Google 的處理辦法很好, 可以借鑒和使用. 它通過隱藏輸入框來放置真正的搜索信息, 所以可以實(shí)現(xiàn)完全關(guān)鍵字和提示文案的區(qū)分.
后話
這個小問題已經(jīng)困擾我很久了 (幾乎每次遇到), 今天終于忍不住看了一下代碼, 希望 Google 的工程師能夠看到本文快速解決掉. (修改建議我都給出來了, 還不改也說不過去吧)
- php+ajax做仿百度搜索下拉自動提示框(有實(shí)例)
- php 搜索框提示(自動完成)實(shí)例代碼
- jquery+php實(shí)現(xiàn)搜索框自動提示
- 利用PHP+JS實(shí)現(xiàn)搜索自動提示(實(shí)例)
- PHP 搜索查詢功能實(shí)現(xiàn)
- php站內(nèi)搜索并高亮顯示關(guān)鍵字的實(shí)現(xiàn)代碼
- PHP獲取搜索引擎關(guān)鍵字來源的函數(shù)(支持百度和谷歌等搜索引擎)
- PHP寫的獲取各搜索蜘蛛爬行記錄代碼
- php使用正則表達(dá)式進(jìn)行字符串搜索的方法
- PHP+JS實(shí)現(xiàn)的實(shí)時搜索提示功能
相關(guān)文章
PHP+JS三級菜單聯(lián)動菜單實(shí)現(xiàn)方法
這篇文章主要介紹了PHP+JS三級菜單聯(lián)動菜單實(shí)現(xiàn)方法,涉及JavaScript動態(tài)控制頁面樣式及PHP數(shù)據(jù)庫操作相關(guān)技巧,需要的朋友可以參考下2016-02-02
在WINDOWS中設(shè)置計(jì)劃任務(wù)執(zhí)行PHP文件的方法
在網(wǎng)上找了些WINDOWS執(zhí)行PHP的計(jì)劃任務(wù)的方法,有一個寫得很全,可惜在我這竟然沒通過。最后不得不綜合各門派的方法,才能在我這運(yùn)行成功2011-12-12
php 網(wǎng)頁播放器用來播放在線視頻的代碼(自動判斷并選擇視頻文件類型)
其實(shí)這里的php 視頻播放代碼基本上常見的視頻格式都支持,用正則匹配文件擴(kuò)展名,并根據(jù)文件擴(kuò)展名的不同調(diào)用相應(yīng)的在線播放器代碼。2010-06-06
PHP設(shè)計(jì)模式之簡單工廠和工廠模式實(shí)例分析
這篇文章主要介紹了PHP設(shè)計(jì)模式之簡單工廠和工廠模式,結(jié)合實(shí)例形式分析了php設(shè)計(jì)模式中工廠模式的實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03
php環(huán)境套包 dedeampz 偽靜態(tài)設(shè)置示例
這篇文章主要介紹了php環(huán)境套包 dedeampz 偽靜態(tài)設(shè)置,需要的朋友可以參考下2014-03-03
使用php來實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)
在調(diào)用網(wǎng)絡(luò)服務(wù)的過程中,需要兩個消息,發(fā)送的消息和接受的消息,又來有往方能來往不是。2009-09-09
詳解PHP實(shí)現(xiàn)定時任務(wù)的五種方法
這幾天需要用PHP寫一個定時抓取網(wǎng)頁的服務(wù)器應(yīng)用。 在網(wǎng)上搜了一下解決辦法, 找到幾種解決辦法,現(xiàn)總結(jié)如下。2016-07-07
php中處理mysql_fetch_assoc返回來的數(shù)組 不用foreach----echo
php中處理mysql_fetch_assoc返回來的數(shù)組 不用foreach----echo的方法,需要的朋友可以參考下。2011-05-05

