谷歌音乐搜索栏的提示功能php修正代码


Posted in PHP onMay 09, 2011

问题描述

在加载页面的时候, 将光标快速定位到搜索栏上, 待页面加载完成, 搜索栏进行初始化后会显示搜索提示. 此时输入的任何内容将成为搜索提示的一部分而不是搜索关键字. 截图如下:

谷歌音乐搜索栏的提示功能php修正代码

导致原因

搜索栏的 JavaScript 初始化执行在 onload 的时候. 因为页面图片请求多, 完全加载需要 3 秒钟左右, 并且搜索栏的 tabindex 被设为 1, 搜索优先的用户很容易就能遇到.

以下是我根据自己的理解反编译出来的 JS 代码, 页面在 onload 的时候将会执行 m.hint.initHint 方法为搜索框添加提示功能.

/** 
* 为搜索框添加提示功能 
* @param searchTip 提示信息 
* @param searchBoxId 搜索输入框 ID 
* @param hideBoxId 关键字隐藏框 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 节点加载和 JavaScript 初始化之间的时间. 可以在搜索框加载完成后立刻执行 JS, 反正 Google 自己的产品也不需要 SEO. 当然, 最好在 DOM ready 的时候执行.

扩展知识
记得我写过一篇文章, 介绍如何在 WordPress 搜索框添加文字提示. 我的处理办法简单粗暴, 仅以框内关键字来判断是关键字还是提示信息. (所以我的提示信息很长)

在分析这个案例的过程中, 我发现 Google 的处理办法很好, 可以借鉴和使用. 它通过隐藏输入框来放置真正的搜索信息, 所以可以实现完全关键字和提示文案的区分.

后话
这个小问题已经困扰我很久了 (几乎每次遇到), 今天终于忍不住看了一下代码, 希望 Google 的工程师能够看到本文快速解决掉. (修改建议我都给出来了, 还不改也说不过去吧)

PHP 相关文章推荐
PHP 采集获取指定网址的内容
Jan 05 PHP
php提示undefined index的几种解决方法
May 21 PHP
PHP计算2点经纬度之间的距离代码
Aug 12 PHP
PHP两种快速排序算法实例
Feb 15 PHP
PHP Hash算法:Times33算法代码实例
May 13 PHP
php判断linux下程序问题实例
Jul 09 PHP
php算法实例分享
Jul 14 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
Jan 04 PHP
php 随机排序广告的实现代码
May 09 #PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 #PHP
PHP新手入门学习方法
May 08 #PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 #PHP
php 大数据量及海量数据处理算法总结
May 07 #PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 #PHP
php调用mysql数据 dbclass类
May 07 #PHP
You might like
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
PHP安装全攻略:APACHE
2006/10/09 PHP
劣质的PHP代码简化
2010/02/08 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
python 二分查找和快速排序实例详解
2017/10/13 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
Python持续监听文件变化代码实例
2020/07/22 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
初一生物教学反思
2014/01/18 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
前处理班长职位说明书
2014/03/01 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
交通事故协议书范文
2014/10/23 职场文书
工人先锋号申报材料
2014/12/29 职场文书
怎样写观后感
2015/06/19 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js