淘宝搜索框效果实现分析


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 相关文章推荐
JavaScript 类型的包装对象(Typed Wrappers)
Oct 27 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
Jun 04 Javascript
JavaScript Scoping and Hoisting 翻译
Jul 03 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 Javascript
深入理解JSON数据源格式
Jan 10 Javascript
js读取json的两种常用方法示例介绍
Oct 19 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
Node.js插件安装图文教程
May 06 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
Jun 27 Javascript
Bootstrap面板学习使用
Feb 09 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
Nov 04 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
PHP时间和日期函数详解
2015/05/08 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
python解析json实例方法
2013/11/19 Python
Python常用内置函数总结
2015/02/08 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
Python实现图片转字符画的示例
2017/08/22 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Django的models中on_delete参数详解
2019/07/16 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
婚礼主持词开场白
2014/03/13 职场文书
大学生见习报告范文
2014/11/03 职场文书
环卫处个人工作总结
2015/03/04 职场文书
未婚证明范本
2015/06/15 职场文书
2015初中团委工作总结
2015/07/28 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers