网络编程
位置:首页>> 网络编程>> 网页设计>> 改善登陆界面的用户体验: 自动聚焦表单

改善登陆界面的用户体验: 自动聚焦表单

作者:sofish 来源:幸福收藏夹 发布时间:2009-12-09 16:13:00 

标签:用户体验,聚焦,表单,界面


在登陆界面中,通常,最重要的部分为登陆的Form表。一个非常棒的提升体验的做法是,在载入页面时自动聚焦到第一个提供用户输入的表单框,让用户不用再多一个点击,就可以输入。这被很多网站采用。记得这在10个改善UI设计的技术(2)这篇文章中也有提到过,这也被很多网站采用,比如 * 就是这样:


当然,自动聚焦不仅仅适合在登陆界面,而适合在任何需要的界面。比如WordPress登陆后台的界面和支付宝的登陆界面,都采用了自动聚焦的方法。

而具体应该是怎样实现的呢?假设我们的表单如下:

<form id="signin" method="post" name="signin" action="http://www.happinesz.cn"> <input value="hidefor" type="hidden" name="hide" /> <input id="usr" name="usr" /> <input id="pwd" type="password" name="pwd" /> <input id="smbt" value="submit" type="button" name="smbt" /></form>

我们要让焦点落在id="usr"input上,用 Javascript 的方法,我们可以这样做:

document.forms["signin"].elements["usr"].focus();

这里是当我们明确知道要在那个表单上添加 focus 的时候可以用的方法。这里,elements也可以用方括号的方法来获取input表单,比如.elements[0]即为第一个input表单。当我们要聚焦的 input前面有type="hidden"的隐藏input,由于隐藏的input是不支持.focus的,一旦应用其上,就会出现Javascript错误,要避免这样的的错误。我们可以搜索第一个表单中,第一个非隐藏的 input,并给加上.focus:(除非你是想封装起来,自动判断,不然,最好不要用这个方法,多浪费资源啊,又if又for的)

window.onload = function(){ if(document.forms.length>0){  for(i=0;i<document.forms[0].elements.length; i++){   var oInput = document.forms[0].elements[i];   if(oInput.type!="hidden"){    oInput.focus();    return;   }  } }}

到这里,很多网站都只做到这里,比如我前面提到的Wordpress的登陆界面和支付宝的登陆界面。他们的目标的相同的,提升用户体验。我的目标也这样。但是,这有时候,这并不一定提升了用户体验。为什么呢?

想想,你是不是也曾出现过这样的状况:当时,你的网速并不快,你进入www.alipay.com的时候,还没有自动聚集,因为JS还没加载。但,你已经输入用户名了,并且已经在输入密码。好,打住。我们来讲个故事:很久很久以前,有个叫sofish,他当时挂着迅雷在下载XXX东西,急着想要用支付宝,当时页面还没有加载完,输入用户名后,正准备输入密码(习惯性地用键盘上的TAB键来切换到密码框),然后,抬头,当时,密码出现在输入用户名的框上,并且,旁边有一同学正在那里看着。

你看,你看,难道,这样的自动聚焦提升了用户的所谓的体验么? 这里,就往往相反,可能导致用户要重新改密码(比如那个当时RP比较低下的叫sofish的家伙)。

有什么方法可以解决么?当然!我们把上面的代码改装如下:

window.onload = function(){ if(document.forms.length>0){  for(i=0;i<document.forms[0].elements.length; i++){   var oInput = document.forms[0].elements[i];   if(oInput.type!="hidden" && oInput.value==""){    oInput.focus();    return;   }  } }}

但是,这样一来,这个聚集就会自动跳到下一个非隐藏的input中,如果我正在输入,那不是很不爽? 嗯,当然不爽,所以,我们再折腾一下,做点小改正:

window.onload = function(){ if(document.forms.length>0){  for(i=0;i<document.forms[0].elements.length; i++){   var oInput = document.forms[0].elements[i];   if(oInput.type!="hidden" && oInput.value.length>0){     oInput.blur();     return;   }else if(oInput.type!="hidden"){    oInput.focus();return    }  } }}

由于在oInput.type!="hidden"中有一种情况,即当用户已经输入的时候,他会自动聚集到下一个,这样,也有问题,所以,我们让如果已经有输入的情况下,去掉所有input的焦点,而 else if中才让没有输入的用户自动对焦到第一个。(当然,如果有人习惯先输入密码,再输入用户名,那就再另想办法吧)。

其实,这样,有时候好用,但有时候相当于根本不去自动聚焦。不过,对于保护用户的输入(特别是密码)来说,我想,用改进的方法,会比无改进的自动聚焦和根本不自动聚集来得好。当然,我相信,会有更好的方法。请不吝赐教。其他的就让我这个爱折腾的JS编程学院新生慢慢发现吧。

0
投稿

猜你喜欢

  • 触发器权限和所有权CREATE TRIGGER 权限默认授予定义触发器的表所有者、sysadmin 固定服务器角色成员以及 db_owner
  • 长期以来一直以为iframe跟div一样都是块级元素,直到今天在一个群中看到一位朋友问到iframe怎么居中的时候,测试了下发现原来我一直对
  • 在 CodeBit.cn 的论坛中,有人问 Javascript 中如何截取小数位并实现四舍五入,这是一个很常用的 js 技术,帖子中也有网
  • 内容摘要:本文详细介绍了SQL Server导入导出数据的方法:(1)导出导入SQL Server里某个数据库,(2)导
  • 先从String的扩展开始吧,后面有一部分的扩展要依赖这里扩展的方法。为了更加清晰和详细,我会一个方法一个方法地贴出来,你完全可以把所有的方
  • 让ASP搭配MYSQL所需要工具mysql-4.1.11-win32 myodbc-3.51.11-1-dll myodbc-3.51.11
  • SWFObject的使用是非常简单的,只需要包含 swfobject.js这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入Fla
  • 在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为
  • 遇到一个难题,在无物理键盘情况下,通过页面软键盘在页面文本框输入汉字,不知道51js的各位大牛有没有遇到过这种需求,如果遇到过是如何解决的,
  • 即text-overflow:ellipsis,需要配合white-space:nowrap使用。运行代码:<div style=&q
  • Tips 1:新增数据表与定义字段更加直观若要建立新数据表,可以在开启数据库后,直接单击“创建”标签,在“表”选项组中单击“表”按钮,即可新
  • 人的大脑通过双眼来辨别视觉图形获取信息。大脑根据储存的经验,将所看到的视觉图形建立起优先级。由此可见,一个良好的视觉设计可以帮助大脑迅速有效
  • 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
  • 不错,这个是一个文章详细页,没有左右两栏布局,不过这里我重点要讲的是合理的布局,在稍后的文章中我会详细的介绍浮动元素。好,回到刚才的话题,大
  • 在IE浏览器调试代码,我们可以选择使用 IE WebDeveloper但是我个人用惯了ff浏览器下的firebug,所以在网上搜了一下,如果
  • 登录与注册两个按钮似乎天生就应该是排在一起的,就像很多地方的“确定”与“取消”一样,甚至排在一起的意义远远强于后者。于是长期以来,用户们也形
  • mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库
  • 1:mysql是我们使用最多的数据库,如果在日常中正确的对mysql数据进行备份,下面我们就来做这事,通过脚本来实现############
  • 如何取得刚添加的记录自动增加的ID字段的号码?我们用下面这个程序就行:rs(1)=oldrname   &nb
  • 成天都要与样式打交道的朋友,相信对CSS选择符(CSS Selectors)都不会陌生。不过对于刚接触或者还不是很熟悉css的朋友来说,能够
手机版 网络编程 asp之家 www.aspxhome.com