淘宝搜索框效果实现分析


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 相关文章推荐
js汉字转拼音实现代码
Feb 06 Javascript
jquery模拟SELECT下拉框取值效果
Oct 23 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
javascript实现确定和取消提示框效果
Jul 10 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
js实现页面a向页面b传参的方法
May 29 Javascript
AngularJS的ng Http Request与response格式转换方法
Nov 07 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
分享5个顶级的JavaScript Ajax组件库
Sep 16 Javascript
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
JS的深浅复制详细
Oct 16 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操作数组的一些函数整理介绍
2011/07/17 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
php分页函数完整实例代码
2014/09/22 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
php工具型代码之印章抠图
2018/07/18 PHP
php实例化一个类的具体方法
2019/09/19 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
jquery each()源代码
2011/02/14 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
Python手机号码归属地查询代码
2016/05/04 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
数组越界问题
2015/10/21 面试题
物流仓管员岗位职责
2013/12/04 职场文书
党校学习思想汇报
2014/01/06 职场文书
婚庆司仪主持词
2014/03/15 职场文书
PHP获取学生成绩的方法
2021/11/17 PHP