淘宝搜索框效果实现分析


Posted in Javascript onMarch 05, 2011

淘宝的搜索框就用到了这样一种设计:
淘宝搜索框效果实现分析
这种设计一般是用javascript监控了输入框的focus和blur事件:

<input type="text" id="q" value="请输入关键字" /> 
<script type="text/javascript">//<![CDATA[ 
$("#q").onfocus = function() { 
if ("请输入关键字" == this.value) { 


this.value = ""; 

} 
}; 
$("#q").onblur = function() { 

if ("" == this.value) { 


this.value = "请输入关键字"; 

} 
}; 
//]]></script>

这段代码有两个很明显的缺点:

  1. “请输入关键字”这段提示共出现了3次,一旦要改这段文字就得改3个地方,维护显得非常不便
  2. 为了性能优化,我们会把javascript部分放到页面末尾。然而,像门户网站首页这种代码量很大的页面,末尾的javascript很可能会延时1-2秒执行。在这段时间内,即使焦点在输入框内,提示文字也不会消失,用户需要手动删除这段文字再输入内容

淘宝的输入框则采取了另一种做法,它不把这段提示文字作为输入框的value值,而是放在另一个标签内,再用绝对定位把这段文字叠到输入框上:
淘宝搜索框效果实现分析
从上面的代码可以看到,提示文字在label标签内,这样做有两个好处:

  1. 良好的结构性。既不是div不是span,对input的说明就应该用label
  2. 良好的用户体验。由于设置了for属性,当用户点击label的时候,就会自动focus到输入框。

javascript要控制的其实就是label的显示和隐藏,再也不需要管那段提示文字的内容了:

$("#q").onfocus = function() { 
$("label[for=q]")[0].style.display = 'none'; 
}; 
$("#q").onblur = function() { 

if ("" == this.value) { 


$("label[for=q]")[0].style.display = ''; 

} 
};

javascript是简洁了,但用户体验呢?在javascript执行前,那段提示文字也是无论如何都不会消失,用户也是想删掉这段文字,但是他们删不了,因为这些文字实际上并不在输入框内,而他们输入的内容会被提示文字挡住了。我个人认为这给用户带来了很大的疑惑。
淘宝搜索框效果实现分析
Javascript 相关文章推荐
jQuery 研究心得 取得属性的值
Nov 30 Javascript
js对数字的格式化使用说明
Jan 12 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
javascript中RegExp保留小数点后几位数的方法分享
Aug 13 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
JavaScript数组各种常见用法实例分析
Aug 04 Javascript
详解用node-images 打造简易图片服务器
May 08 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
Mar 03 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
Sep 05 Javascript
ElementUI实现el-form表单重置功能按钮
Jul 21 Javascript
再论Javascript下字符串连接的性能
Mar 05 #Javascript
再论Javascript的类继承
Mar 05 #Javascript
Array的push与unshift方法性能比较分析
Mar 05 #Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
Mar 05 #Javascript
判断用户是否在线的代码
Mar 05 #Javascript
判断用户的在线状态 onbeforeunload事件
Mar 05 #Javascript
在多个页面使用同一个HTML片段《续》
Mar 04 #Javascript
You might like
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
PHP设置进度条的方法
2015/07/08 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
Jquery之美中不足小结
2011/02/16 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python识别验证码的思路及解决方案
2020/09/13 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
建筑施工实习自我鉴定
2013/09/19 职场文书
机电专业毕业生求职信
2013/10/27 职场文书
初一地理教学反思
2014/01/16 职场文书
青年文明号事迹材料
2014/01/18 职场文书
三年级数学教学反思
2014/01/31 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
解除财产保全担保书
2014/05/20 职场文书
负责人任命书范本
2014/06/04 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
红与黑读书笔记
2015/06/29 职场文书