谷歌音乐搜索栏的提示功能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 相关文章推荐
网站当前的在线人数
Oct 09 PHP
一个简单的PHP&MYSQL留言板源码
Jul 19 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
Apr 24 PHP
提交表单后 PHP获取提交内容的实现方法
May 25 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
Laravel中间件实现原理详解
Oct 09 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
php截取字符串函数分享
2015/02/02 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
高级技校毕业生自荐信
2013/11/18 职场文书
运动会广播稿300字
2014/01/10 职场文书
社区反邪教工作方案
2014/06/16 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
庐山导游词
2015/02/03 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书