谷歌音乐搜索栏的提示功能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,不用COM,生成excel文件
Oct 09 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
php自动注册登录验证机制实现代码
Dec 20 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
PHP的全局错误处理详解
Apr 25 PHP
Laravel 5.3 学习笔记之 错误&日志
Aug 28 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
python中bytes和str类型的区别
2019/10/21 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
怎样写好自荐信和推荐信
2013/12/26 职场文书
酒店led欢迎词
2014/01/09 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
cf搞笑广告词
2014/03/14 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
师德承诺书
2015/01/20 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
公司董事任命书
2015/09/21 职场文书
Python机器学习之基础概述
2021/05/19 Python
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL