JS教程:如何制作表单自动聚焦的网页

导读:表单聚焦看似一个很小的功能,但也能提高网站的用户体验,当然用JS实现十分简单,本文主要从最基本开始分析如何制作表单自动聚焦的页面。

在登陆界面中,通常,最重要的部分为登陆的Form表。一个非常棒的提升体验的做法是,在载入页面时自动聚焦到第一个提供用户输入的表单框,让用户不用再多一个点击,就可以输入。这被很多网站采用。比如维基百科就是这样:

当然,自动聚焦不仅仅适合在登陆界面,而适合在任何需要的界面。比如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==0){
    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编程学院新生慢慢发现吧。

时间: 2024-12-03 18:16:42

JS教程:如何制作表单自动聚焦的网页的相关文章

js 禁止回车提交表单二种方法

js 禁止回车提交表单二种方法 1.包含form表单 2.只有一个文本框 这样问题就可以解决了,破坏其中任何一个条件即可,一般的做法是加一个隐藏的文本框 当然你也可以在表单 form 后面加上一个 onsubmit 事件,返回 false,来阻止 form 提交 下面看一个回车提交表单的代码 script type="text/网页特效" language="javascript">    function keydown()      {         

Javascript实例教程(9) 检验表单有效性

javascript|教程 利用javascript表单的有效性检验 表单的有效性检验是javascript一个很有用的方面.它可以用于检查一个给定的表单以及发现表单中的任何问题,比如一个空白的输入框或者一个无效的E-mail(电子邮件)地址,然后它可以通知用户并且就不会将这些错误的表单传给服务器以节省时间.另外,除此以外,对表单标签的一些修改跟其它类型的脚本是类似的.以下的例子是一个简单的表单,如下面表单所示.你可以让名字的方框留空白或者输入一个电子邮件地址而没有@符号,即是输入错误的内容,看

js禁止回车提交表单的示例代码

 本篇文章主要是对js禁止回车提交表单的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 如下所示;  代码如下: function ifenter(){    if(event.keyCode==13){   return   false;   }else if(event.srcElement.type=="submit"){    form1.submit();    }   }    document.onkeydown=ifenter;    

弹出框-js,jquery,表单验证

问题描述 js,jquery,表单验证 能弹出框,提示栏目名称不能为空,但是我一点确定,那个空就进入数据库了, 解决方案 验证不通过你要return false阻止表单提交啊.. 而且不能完全依赖客户端的js验证,你服务器端也要验证一遍 解决方案二: 刚才图上错了'

js实现不提交表单获取单选按钮值的方法_javascript技巧

本文实例讲述了js实现不提交表单获取单选按钮值的方法.分享给大家供大家参考.具体如下: 这是JS实现的特效,不提交表单获取相关的控件值.如本例所示,不提交表单即可获取单选按钮的值. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-alert-show-table-value-codes/ 具体代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

c# 提交网络表单之前获取网页数据

问题描述 提交网络表单之前获取网页数据要获取网页的一个数据和COOKIS如果出现了这个错误 解决方案 解决方案二:都GetResponse了,还叫提交之前吗解决方案三:引用1楼shingoscar的回复: 都GetResponse了,还叫提交之前吗 就是要在GetResponse之前有什么办法,cookis和网面里面的数据不用GetResponse没有办法获取解决方案四:再创建个新的request不就行了解决方案五:引用3楼shingoscar的回复: 再创建个新的request不就行了 新建r

Vue.JS入门教程之处理表单_javascript技巧

本文实例为大家分享了Vue.JS表单处理的相关内容,供大家参考,具体内容如下 基本用法 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/0.12.16/vue.m

ajax制作表单验证示例

ajax的功能主要是应用在js上,ajax对asp没什么要求,asp只负责在后台显示及操作服务端的数据. 可以像下面这样思考: 1.写表单第一项(如用户名) 2.onblur事件(失去焦点)发生时开始验证,onblur="checkusername()" 3.js发一个请求给第一个asp(假定为ajaxusername.asp)如果从数据库中找到了这个用户,给出1(ajaxusername.asp所有内容就是一个1)如 <% if(user.exist())response.wr

用css制作表单并体验亲和力

css 对于表单,很常用.但是在web standard建站的时候,他的排版往往让人遗忘,到了真正用到的时候就发现让人头疼,当然我也遇到过.我现在要介绍一个用<fieldset></label>标签制作漂亮而且具体亲和力的表单的方法. 基本的xhtml: <h3>已注册用户登录</h3> <form action="" method="post" name="apLogin" id="