淘宝搜索框效果实现分析


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停止输出代码
Jul 20 Javascript
用JavaScript实现单继承和多继承的简单方法
Mar 29 Javascript
javascript demo 基本技巧
Dec 18 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
jquery prop的使用介绍及与attr的区别
Dec 19 Javascript
深入浅析Extjs中store分组功能的使用方法
Apr 20 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
使用3D引擎threeJS实现星空粒子移动效果
Sep 13 Javascript
如何在vue中使用ts的示例代码
Feb 28 Javascript
vue实现键盘输入支付密码功能
Aug 18 Javascript
Vue核心概念Action的总结
Jan 18 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
Feb 15 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中substr()函数参数说明及用法实例
2014/11/15 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
Python实现网络端口转发和重定向的方法
2016/09/19 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
2014高中生入党思想汇报范文
2014/09/13 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
公司转让协议书
2016/03/19 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL