淘宝搜索框效果实现分析


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 相关文章推荐
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
Jan 15 Javascript
js模拟select下拉菜单控件的代码
May 08 Javascript
window.onload追加函数使用示例
Mar 03 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
JQuery PHP图片在线裁剪实例
Jul 27 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
Aug 25 Javascript
微信小程序实现搜索指定景点周边美食、酒店
May 18 Javascript
vue eslint简要配置教程详解
Jul 26 Javascript
解决vant的Toast组件时提示not defined的问题
Nov 11 Javascript
vue+element_ui上传文件,并传递额外参数操作
Dec 05 Vue.js
再论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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
PHP读取xml方法介绍
2013/01/12 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
js实现移动端轮播图
2020/12/21 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
Python中random模块用法实例分析
2015/05/19 Python
详解Python编程中基本的数学计算使用
2016/02/04 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
如何通过python实现全排列
2020/02/11 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
TCP/IP的分层模型
2013/10/27 面试题
公司培训欢迎词
2014/01/10 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
计划生育工作汇报
2014/10/28 职场文书
创业计划书之养殖业
2019/10/11 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
Python图片验证码降噪和8邻域降噪
2021/08/30 Python