- 浏览: 90209 次
- 性别:
- 来自: 北京
最新评论
-
重庆结汇henry1:
随着国内外管对国外离岸账户资金来往的限制越来越严格,好多广 ...
AdMob收款 直接汇款到国内账户 -
JustDoNow:
谢谢啊
今天我就碰见这个错
郁闷死了
本地好好的
放到服 ...
tomcat的startup failed due to previous errors错误 -
netren:
问个比较菜的问题:)
ERP 中的业务流程是固定的吗?
理解ERP原来如此简单 -
heoo:
楼主您好,我按你说的去做,总是报版本不一致的错误。请问还要注意 ...
如何去掉abator生成文件中讨厌的注释 -
yangwn:
LZ,知道在你使用like '%$value$%' 进行模糊查 ...
如何进行ibatis动态多条件组合查询以及模糊查询(oracle,mysql)
随着企业intranet和国际internet的迅速发展,越来越多的工作流程,商务交易,教育、培训、会议和讲座,以及个人消费娱乐都被转移到所谓的万维网(World Wide Web,以下简称WEB)上来了。与此相对应的是交互操作的复杂性越来越高。
随着Browser/Server模式的日渐流行,很多操作都是在浏览器环境下的网页上完成的,并不是只有失效的链接和意外的出错才会使操作者感到烦恼,即便是一次完整的成功操作过程,也可能因为操作的繁复性过高或者使用上的不方便而给操作者带来不愉快的体验。
本文试图阐述WEB交互页面设计的一些指导性原则,这些原则有利于避免发生不愉快的操作体验。这些原则是用户友好性的,是在完成同一种操作要求下,使用户最感到轻松、简单、舒适的WEB交互界面设计原则。我们假定我们讨论的WEB页面都是功能正常的,符合美学观点的。需要说明我们讨论的原则可能会和设计上的美学观点以及既有的功能设计有所冲突。如果发生这种情况,基于“实用的就是美的”观点,我们会建议您酌情放弃原先的美学观点与功能设计。
1. 输入控件的自动聚焦和可用键盘切换输入焦点
使用JavaScript实现页面加载完成后立即自动聚焦(focus)到第一个输入控件。可用TAB键(IE缺省实现)或方向键切换聚焦到下一个输入控件。
输入控件指WEB页面表单(<form>)中显式的,需要用户进行修改、编辑操作的表单元素。对于这些控件,如果没有自动聚焦操作,不可避免的出现一次用户鼠标定位操作(如果用户此前处于键盘输入操作状态或鼠标定位后需要进行键盘输入操作,实际上是键盘鼠标切换操作)。如果鼠标定位后需要进行键盘输入操作,如果不能键盘切换输入焦点,那么不可避免的在切换输入焦点时需要反复的键盘鼠标切换操作,这是很繁琐的。
如果实现了页面加载完成即自动聚焦到第一个输入控件,并且可以键盘切换输入焦点标定位操作,那么对于用户来说整个页面的输入操作可能都不需要鼠标操作,或次数较少,这是一种便利。毕竟频繁的键盘鼠标切换操作是比较累人的。
对于有输入栏的对话框或网页,在不干预的情况下就应将当前控制焦点定位在待输入的输入栏上;如果输入栏在一般情况下不需要更改其中的内容,则应直接将焦点定在“确定”按钮上;在几个输入栏之间应支持tab,shift+tab切换操作,“确定”和“取消”应该是切换操作的终点,与具体所在位置无关。
2.可用Enter(或Ctrl+Enter)键提交,确保和点击提交按钮的效果是相同的
不要在提交按钮上加入onClick=”…”这样的JavaScript代码。
用Enter键提交页面是原则1的自然延伸,而且这也是浏览器所缺省支持的。只所以单独列出来是因为实际上有些设计者设计的页面不能达到这种效果,结果导致使用Enter键提交和点击“确定”按钮提交带来的效果不一样。大部分情况下是设计者在“确定”按钮上加入了onClik=”…”这样的代码,通过点击“确定”按钮后,会执行一段JavaScript代码,比如对某些hidden类型的input元素设值。而使用Enter键提交时就不会执行这段代码。
正确的做法是把这段代码移到表单标签<-form->中,以onSubmit=”…”属性引入。
对于<textarea>表单元素,它会消耗Enter键,因此会使得Enter键提交失效。可以引入JavaScript代码捕捉Ctrl+Enter复合键,一旦捕捉到即执行表单的submit()方法。对于需要频繁提交的场合,比如BBS上,这种代码是很有必要的。
3. 鼠标动作提示和回应
对用户的鼠标定位操作,当移动到可响应的位置上时,应给予视觉或听觉的提示。
动作回应的最简单形式就是鼠标ICON变成手状。浏览器只对具有href属性的HTML标签会自动进行这种变换ICON的行为。对于没有href属性(或没有设置href属性)的标签,可以通过JavaScript设置style属性的cursor为hand。
目标区域发生变化是更为主动的响应形式。当鼠标指针移到目标区域,此时指针图形改变或文字颜色发生改变均能较大的减轻用户搜索定位目标区域的注意力负担。在按钮上增添直观的图形,尽可能的增大按钮面积;按钮间保持适当的距离,太近增加了用户区别它们之间界限以防误操作的负担,太远增加了用户搜索定位按钮的负担。
4.尽可能早的在客户端完成输入数据合法性验证
输入数据的合法性检验应该在客户端使用JavaScript进行验证。除非验证只能在服务器端完成,否则验证工作应在最早能完成的情况下进行。
在客户端完成数据合法性验证,可以避免一次服务器请求和回复通讯,这种通讯是需要用户等待的,如果用户等待很长时间后从服务器返回的结果提示出现的错误是在输入时即可发现的,那么这种设计就是不友好的。诸如密码长度限制,用户名允许字符限制等等,显然应该在客户端提交前就应该进行验证。
5. 根据应用场景决定在表单页面和提交后返回页面间是否使用中间过渡页面
根据应用场景,决定是否显示接收表单页面(表单页面和提交后返回页面间的中间过渡页面),以及使用何种方式显示接收表单页面。
表单页面和接收表单页面是大部分WEB交互操作赖以实现的配合模式。关于表单页面和接收表单页面的相互关系的设计,要做如下几个方面的考虑。
一,对于需要频繁操作的场合,从操作便利和快捷性出发,尽可能的减少服务器和客户端交互次数,应该避免使用中间过渡页面。提交完毕直接返回原来的表单页面或默认页面。在这种情况下要考虑到数据安全和可恢复性。
如果因为用户输入的数据不合格,需要重新输入,那么,去除中间页面,把错误信息直接显示在原表单页面上的设计方式,将是最简洁的处理方式。用户只需要根据错误提示进行更正即可。当然这样做稍微增加了编程负担。在表单接收页面上需要包含原表单页面的内容,而且输入数据项都必须用服务器端代码或客户端JavaScript设置成用户输入的值。为了开发快捷,可以这样做:表单页面和接收表单页面用同一个服务器端脚本页面实现。这个页面按如下流程完成原来两个页面的工作:
页面脚本初始化
┃检查“提交”变量是否设置┠已设置,做数据验证┃ 验证通过->业务逻辑处理->使用包含页面方式或重定向方式返回到特定页面 ┃ 验证不通过->保存用户输入的数据->退出表单提交处理到表单页面流程中┗未设置,做表单页面流程,如有来自提交流程中产生的用户输入数据,则显示出来
其中,使用包含页面方式返回到特定页面可以避免一次客户端重定向过程,比客户端重定向过程还要快捷和稳定一些。但是有些情况下因为代码变量冲突或其他原因,使用包含页面方式可能并不方便,这时候可以使用服务器端重定向技术,在ASP里是Server.Transfer方法,在Java Servlet里是RequestDispatcher.forward()方法。不要使用Response.Redirect或者HttpServletResponse.sendRedirect()这种客户端HTTP重定向方法。不使用中间过渡页面也就意味着用户不能后退浏览原先已经填好的表单页面,因为使用的是同一个URL。所以在验证不通过情况下保存用户输入的数据就是必不可少的。
不使用中间过渡页面带来的另一个问题就是使用包含页面方式或服务器端重定向方式返回会使得URL和页面内容不能一一对应。对于用户可能会直接用这个URL(会收藏这个URL)访问返回页面的情况,他会发现实际上到达的是表单页面,不是他想要的那个返回结果页面。所以,去除中间过渡页面,确实会带来URL和内容含混不清的情况,因而不适合需要URL和页面内容一一对应的场合。
二,从技术角度考虑,使用中间过渡页面能保证URL和页面内容一一对应,简化页面开发工作。
为了保证页面内容总是和固定的URL联系起来,必须使用客户端重定向:
提交 业务逻辑处理 (中间过渡页面)
表单页面―>接收表单页面―>显示处理结果―>客户端重定向到特定页面
客户端重定向分几种情况:1,使用HTTP Header重定向,Location:http://www.netall.com.cn,这种定向是最快的,在窗口一片空白的情况下就迅速访问(GET)另一个页面。这种方式实际上不能显示处理结果,只能说是向第一种快速重定向方式的一种折衷处理;2,HTML标签刷新,<--META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.netall.com.cn">,这种定向比较友好,在这个页面加载完毕后访问另一个页面。很多设计者把这个作为一个技巧使用,在载入一个大页面前放置一个缓冲页面以避免用户乏味的等待;3,JavaScript重定向。由于是用代码控制重定向,可以做的更灵活。比如根据用户习惯,控制操作完毕后的转向流程。4,被动式的重定向。在页面上放置按钮或链接,由用户手动决定返回到特定页面。这种情况适合于处理结果的显示页面包含相当多的信息,需要用户仔细浏览,而决定下一步的操作。
在使用中间过渡页面的情况下,不能再使用页面过期失效了。否则一旦出现错误,需要用户重新输入表单数据,用户就不能用后退按钮恢复此前填写的表单数据了。除非设计者有意禁止这种恢复。
6. 防止表单重复提交处理
对提交按钮点击后做变灰处理避免在网络响应较慢情况下用户重复提交同一个表单。使用页面过期失效避免用户后退浏览重复提交表单。
有些复杂的应用会导致需要较长时间的等待才会返回处理结果。而在较慢的网络环境中,这种情况更是频繁发生。焦急等待的用户往往会重复点击提交按钮。这种情况是设计者所不希望看到的。
使用JavaScript在点击提交按钮后使按钮失效变灰是一个最直接的办法(根据原则2这段代码应该放在<-form->标签里onSubmit=”…”做)。此外,在表单页面上,用服务器端脚本设置HTTP Header的Expires为立即过期可以保证用户没办法使用后退浏览恢复表单页面。注意这样做的代价可能是用户辛辛苦苦填写很长的内容,结果一旦操作失误就没法恢复。所以应该避免在包含<textarea>表单元素的页面上使用页面过期失效。
应该说,更严格的方法是,服务器端脚本就应该具备抵抗重复提交的能力。例如,为这个表单分配一个唯一ID或一个使用一次即失效的验证码。此外,这个表单处理还应具有事务性质,如果表单不被接受,所做的改变还是能恢复的。在金融应用场合,重复提交同一笔交易是肯定不被允许的。能在重复提交中获利的一方总是会想办法绕过浏览器的限制,所以不能依赖于客户端的技术。
7. 页面链接是打开新窗口、使用原窗口还是弹出窗口的原则
一般而言,首页上链接可以使用target=”_blank”属性打开新窗口,而其他页面上的链接都应使用原窗口或弹出窗口。如果链接页面内容相对原页面来说不重要,是附属性质的,可以使用弹出窗口方式。
一般情况下应该使用原窗口,把是否保留原窗口内容的权利留给用户。除非设计者相信原页面是如此重要,在用户发出点击指令后还有使用上的价值,以至于不能被随便更新或覆盖。一般来说,只有首页才会处于这样一个地位,用户在首页上打开一个链接后,一般还会在这个首页上去打开另一个链接。比如首页包含极多链接的门户网站,或者搜索引擎的搜索结果页面。Google.com以前的搜索结果页面上的链接是使用原窗口的,后来他们意识到用户会反复使用这个页面,而改成打开新窗口了。一般的网站如果首页链接不多,就不必使用新窗口,这是用户友好的设计原则。
上述情形的一个极端情况就是新页面内容比起原页面内容的重要性差很多,以至于都未必需要打开一个新页面。这时候使用弹出窗口比较合适。用JavaScript弹出窗口有好几种:一个是window.open()函数。这里有个技巧。应该使用window.open()先打开一个空白窗口,再使用location.replace()用目标页面替换。这样做可以避免在打开新页面的过程中导致原页面失去响应。Window.open()将打开一个新的浏览器窗口进程,因此资源消耗比较大。另一个是由微软DynamicHTML规范中扩充的方法createPopup()。createPopup()可以创建无边框的弹出窗口,消耗系统资源较小。还有一个就是用页面中隐藏的层<-div>来模拟一个弹出页面。后两种可以使用JavaScript代码填充弹出窗口内容。如果需要下载网页作为其内容的话,需要微软DynamicHTML规范中的<download>标签。
8. 尽可能少的排列可选项,尽可能少的安排操作步骤
根据用户操作习惯安排尽可能少的操作菜单选项,同时要保证尽可能少的操作步骤。
在不降低功能多样性的前提下减少菜单项和操作步骤是用户友好的设计。要做到这一点很不容易。要从用户出发考虑他们最频繁的操作是什么。正常情况下一个用户需要的操作总可以归类为5个以下的种类,如果出现更多的种类,那一定是没有针对用户兴趣去区分主次。一个用户同时有5个以上的强烈兴趣中心是难以想像的,走马观花似的随意点击浏览的用户,是不大可能在某个种类上进行深入的交互操作的。在这5个种类中,每个种类都可能有若干个可操作的二级种类。如果这些二级操作项是不可见的,那么意味着要做两次选择才能进入可操作页面。这就违背了“尽可能少的安排操作步骤”这一原则。如果使用JavaScript制作二级菜单,避免请求服务器,会好一些。如果二级菜单项总共不超过20个左右,不妨将二级菜单直接显示出来,比如放在左列一字向下排开,这样只需要一次选择到可操作项,更加明了方便。
9. 操作逻辑无漏洞,保证数据是操作安全的
多个页面间的操作和同个页面上的多个操作间的逻辑关系在设计上是安全和严谨的。保证不会出现不被允许的用户操作组合,至少不会因为用户的不适当的操作导致出错。
这最典型的表现则是在页面上广泛采用的所谓联动下拉框设计。一个下拉框中允许的选项受另一个下拉框中的选择而变。另外一个例子是根据选择使表单元素有效或者失效。如果在多个页面间也要维持某种合法性逻辑,那么就需要服务器端脚本的参与。这样会使表单设计跟操作有关,应该说这不是一个好的设计。可以通过变更操作步骤顺序、组合方式来尽可能避免这种情况出现。
操作逻辑的设计既要保证用户任意的输入不会导致错误,也要保证是用户输入的数据能购被安全处理。在Session控制下的表单中输入大幅文字可能会导致超时出错,这时候往往还伴随重定向过程,导致用户的长篇输入荡然无存。用JavaScript提醒用户已超时,请保存输入后重新提交,是一个好办法。某些表单元素如<-input type=”text”>接受ESC键清除数据,并且无法撤销,这也是很危险的。在中文输入法中常常使用ESC键清楚输入的码位,一旦不小心多按一下ESC就会使得输入数据消失。因此有必要用JavaScript禁用<-input>和<-textarea>的ESC键处理过程。
随着Browser/Server模式的日渐流行,很多操作都是在浏览器环境下的网页上完成的,并不是只有失效的链接和意外的出错才会使操作者感到烦恼,即便是一次完整的成功操作过程,也可能因为操作的繁复性过高或者使用上的不方便而给操作者带来不愉快的体验。
本文试图阐述WEB交互页面设计的一些指导性原则,这些原则有利于避免发生不愉快的操作体验。这些原则是用户友好性的,是在完成同一种操作要求下,使用户最感到轻松、简单、舒适的WEB交互界面设计原则。我们假定我们讨论的WEB页面都是功能正常的,符合美学观点的。需要说明我们讨论的原则可能会和设计上的美学观点以及既有的功能设计有所冲突。如果发生这种情况,基于“实用的就是美的”观点,我们会建议您酌情放弃原先的美学观点与功能设计。
1. 输入控件的自动聚焦和可用键盘切换输入焦点
使用JavaScript实现页面加载完成后立即自动聚焦(focus)到第一个输入控件。可用TAB键(IE缺省实现)或方向键切换聚焦到下一个输入控件。
输入控件指WEB页面表单(<form>)中显式的,需要用户进行修改、编辑操作的表单元素。对于这些控件,如果没有自动聚焦操作,不可避免的出现一次用户鼠标定位操作(如果用户此前处于键盘输入操作状态或鼠标定位后需要进行键盘输入操作,实际上是键盘鼠标切换操作)。如果鼠标定位后需要进行键盘输入操作,如果不能键盘切换输入焦点,那么不可避免的在切换输入焦点时需要反复的键盘鼠标切换操作,这是很繁琐的。
如果实现了页面加载完成即自动聚焦到第一个输入控件,并且可以键盘切换输入焦点标定位操作,那么对于用户来说整个页面的输入操作可能都不需要鼠标操作,或次数较少,这是一种便利。毕竟频繁的键盘鼠标切换操作是比较累人的。
对于有输入栏的对话框或网页,在不干预的情况下就应将当前控制焦点定位在待输入的输入栏上;如果输入栏在一般情况下不需要更改其中的内容,则应直接将焦点定在“确定”按钮上;在几个输入栏之间应支持tab,shift+tab切换操作,“确定”和“取消”应该是切换操作的终点,与具体所在位置无关。
2.可用Enter(或Ctrl+Enter)键提交,确保和点击提交按钮的效果是相同的
不要在提交按钮上加入onClick=”…”这样的JavaScript代码。
用Enter键提交页面是原则1的自然延伸,而且这也是浏览器所缺省支持的。只所以单独列出来是因为实际上有些设计者设计的页面不能达到这种效果,结果导致使用Enter键提交和点击“确定”按钮提交带来的效果不一样。大部分情况下是设计者在“确定”按钮上加入了onClik=”…”这样的代码,通过点击“确定”按钮后,会执行一段JavaScript代码,比如对某些hidden类型的input元素设值。而使用Enter键提交时就不会执行这段代码。
正确的做法是把这段代码移到表单标签<-form->中,以onSubmit=”…”属性引入。
对于<textarea>表单元素,它会消耗Enter键,因此会使得Enter键提交失效。可以引入JavaScript代码捕捉Ctrl+Enter复合键,一旦捕捉到即执行表单的submit()方法。对于需要频繁提交的场合,比如BBS上,这种代码是很有必要的。
3. 鼠标动作提示和回应
对用户的鼠标定位操作,当移动到可响应的位置上时,应给予视觉或听觉的提示。
动作回应的最简单形式就是鼠标ICON变成手状。浏览器只对具有href属性的HTML标签会自动进行这种变换ICON的行为。对于没有href属性(或没有设置href属性)的标签,可以通过JavaScript设置style属性的cursor为hand。
目标区域发生变化是更为主动的响应形式。当鼠标指针移到目标区域,此时指针图形改变或文字颜色发生改变均能较大的减轻用户搜索定位目标区域的注意力负担。在按钮上增添直观的图形,尽可能的增大按钮面积;按钮间保持适当的距离,太近增加了用户区别它们之间界限以防误操作的负担,太远增加了用户搜索定位按钮的负担。
4.尽可能早的在客户端完成输入数据合法性验证
输入数据的合法性检验应该在客户端使用JavaScript进行验证。除非验证只能在服务器端完成,否则验证工作应在最早能完成的情况下进行。
在客户端完成数据合法性验证,可以避免一次服务器请求和回复通讯,这种通讯是需要用户等待的,如果用户等待很长时间后从服务器返回的结果提示出现的错误是在输入时即可发现的,那么这种设计就是不友好的。诸如密码长度限制,用户名允许字符限制等等,显然应该在客户端提交前就应该进行验证。
5. 根据应用场景决定在表单页面和提交后返回页面间是否使用中间过渡页面
根据应用场景,决定是否显示接收表单页面(表单页面和提交后返回页面间的中间过渡页面),以及使用何种方式显示接收表单页面。
表单页面和接收表单页面是大部分WEB交互操作赖以实现的配合模式。关于表单页面和接收表单页面的相互关系的设计,要做如下几个方面的考虑。
一,对于需要频繁操作的场合,从操作便利和快捷性出发,尽可能的减少服务器和客户端交互次数,应该避免使用中间过渡页面。提交完毕直接返回原来的表单页面或默认页面。在这种情况下要考虑到数据安全和可恢复性。
如果因为用户输入的数据不合格,需要重新输入,那么,去除中间页面,把错误信息直接显示在原表单页面上的设计方式,将是最简洁的处理方式。用户只需要根据错误提示进行更正即可。当然这样做稍微增加了编程负担。在表单接收页面上需要包含原表单页面的内容,而且输入数据项都必须用服务器端代码或客户端JavaScript设置成用户输入的值。为了开发快捷,可以这样做:表单页面和接收表单页面用同一个服务器端脚本页面实现。这个页面按如下流程完成原来两个页面的工作:
页面脚本初始化
┃检查“提交”变量是否设置┠已设置,做数据验证┃ 验证通过->业务逻辑处理->使用包含页面方式或重定向方式返回到特定页面 ┃ 验证不通过->保存用户输入的数据->退出表单提交处理到表单页面流程中┗未设置,做表单页面流程,如有来自提交流程中产生的用户输入数据,则显示出来
其中,使用包含页面方式返回到特定页面可以避免一次客户端重定向过程,比客户端重定向过程还要快捷和稳定一些。但是有些情况下因为代码变量冲突或其他原因,使用包含页面方式可能并不方便,这时候可以使用服务器端重定向技术,在ASP里是Server.Transfer方法,在Java Servlet里是RequestDispatcher.forward()方法。不要使用Response.Redirect或者HttpServletResponse.sendRedirect()这种客户端HTTP重定向方法。不使用中间过渡页面也就意味着用户不能后退浏览原先已经填好的表单页面,因为使用的是同一个URL。所以在验证不通过情况下保存用户输入的数据就是必不可少的。
不使用中间过渡页面带来的另一个问题就是使用包含页面方式或服务器端重定向方式返回会使得URL和页面内容不能一一对应。对于用户可能会直接用这个URL(会收藏这个URL)访问返回页面的情况,他会发现实际上到达的是表单页面,不是他想要的那个返回结果页面。所以,去除中间过渡页面,确实会带来URL和内容含混不清的情况,因而不适合需要URL和页面内容一一对应的场合。
二,从技术角度考虑,使用中间过渡页面能保证URL和页面内容一一对应,简化页面开发工作。
为了保证页面内容总是和固定的URL联系起来,必须使用客户端重定向:
提交 业务逻辑处理 (中间过渡页面)
表单页面―>接收表单页面―>显示处理结果―>客户端重定向到特定页面
客户端重定向分几种情况:1,使用HTTP Header重定向,Location:http://www.netall.com.cn,这种定向是最快的,在窗口一片空白的情况下就迅速访问(GET)另一个页面。这种方式实际上不能显示处理结果,只能说是向第一种快速重定向方式的一种折衷处理;2,HTML标签刷新,<--META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.netall.com.cn">,这种定向比较友好,在这个页面加载完毕后访问另一个页面。很多设计者把这个作为一个技巧使用,在载入一个大页面前放置一个缓冲页面以避免用户乏味的等待;3,JavaScript重定向。由于是用代码控制重定向,可以做的更灵活。比如根据用户习惯,控制操作完毕后的转向流程。4,被动式的重定向。在页面上放置按钮或链接,由用户手动决定返回到特定页面。这种情况适合于处理结果的显示页面包含相当多的信息,需要用户仔细浏览,而决定下一步的操作。
在使用中间过渡页面的情况下,不能再使用页面过期失效了。否则一旦出现错误,需要用户重新输入表单数据,用户就不能用后退按钮恢复此前填写的表单数据了。除非设计者有意禁止这种恢复。
6. 防止表单重复提交处理
对提交按钮点击后做变灰处理避免在网络响应较慢情况下用户重复提交同一个表单。使用页面过期失效避免用户后退浏览重复提交表单。
有些复杂的应用会导致需要较长时间的等待才会返回处理结果。而在较慢的网络环境中,这种情况更是频繁发生。焦急等待的用户往往会重复点击提交按钮。这种情况是设计者所不希望看到的。
使用JavaScript在点击提交按钮后使按钮失效变灰是一个最直接的办法(根据原则2这段代码应该放在<-form->标签里onSubmit=”…”做)。此外,在表单页面上,用服务器端脚本设置HTTP Header的Expires为立即过期可以保证用户没办法使用后退浏览恢复表单页面。注意这样做的代价可能是用户辛辛苦苦填写很长的内容,结果一旦操作失误就没法恢复。所以应该避免在包含<textarea>表单元素的页面上使用页面过期失效。
应该说,更严格的方法是,服务器端脚本就应该具备抵抗重复提交的能力。例如,为这个表单分配一个唯一ID或一个使用一次即失效的验证码。此外,这个表单处理还应具有事务性质,如果表单不被接受,所做的改变还是能恢复的。在金融应用场合,重复提交同一笔交易是肯定不被允许的。能在重复提交中获利的一方总是会想办法绕过浏览器的限制,所以不能依赖于客户端的技术。
7. 页面链接是打开新窗口、使用原窗口还是弹出窗口的原则
一般而言,首页上链接可以使用target=”_blank”属性打开新窗口,而其他页面上的链接都应使用原窗口或弹出窗口。如果链接页面内容相对原页面来说不重要,是附属性质的,可以使用弹出窗口方式。
一般情况下应该使用原窗口,把是否保留原窗口内容的权利留给用户。除非设计者相信原页面是如此重要,在用户发出点击指令后还有使用上的价值,以至于不能被随便更新或覆盖。一般来说,只有首页才会处于这样一个地位,用户在首页上打开一个链接后,一般还会在这个首页上去打开另一个链接。比如首页包含极多链接的门户网站,或者搜索引擎的搜索结果页面。Google.com以前的搜索结果页面上的链接是使用原窗口的,后来他们意识到用户会反复使用这个页面,而改成打开新窗口了。一般的网站如果首页链接不多,就不必使用新窗口,这是用户友好的设计原则。
上述情形的一个极端情况就是新页面内容比起原页面内容的重要性差很多,以至于都未必需要打开一个新页面。这时候使用弹出窗口比较合适。用JavaScript弹出窗口有好几种:一个是window.open()函数。这里有个技巧。应该使用window.open()先打开一个空白窗口,再使用location.replace()用目标页面替换。这样做可以避免在打开新页面的过程中导致原页面失去响应。Window.open()将打开一个新的浏览器窗口进程,因此资源消耗比较大。另一个是由微软DynamicHTML规范中扩充的方法createPopup()。createPopup()可以创建无边框的弹出窗口,消耗系统资源较小。还有一个就是用页面中隐藏的层<-div>来模拟一个弹出页面。后两种可以使用JavaScript代码填充弹出窗口内容。如果需要下载网页作为其内容的话,需要微软DynamicHTML规范中的<download>标签。
8. 尽可能少的排列可选项,尽可能少的安排操作步骤
根据用户操作习惯安排尽可能少的操作菜单选项,同时要保证尽可能少的操作步骤。
在不降低功能多样性的前提下减少菜单项和操作步骤是用户友好的设计。要做到这一点很不容易。要从用户出发考虑他们最频繁的操作是什么。正常情况下一个用户需要的操作总可以归类为5个以下的种类,如果出现更多的种类,那一定是没有针对用户兴趣去区分主次。一个用户同时有5个以上的强烈兴趣中心是难以想像的,走马观花似的随意点击浏览的用户,是不大可能在某个种类上进行深入的交互操作的。在这5个种类中,每个种类都可能有若干个可操作的二级种类。如果这些二级操作项是不可见的,那么意味着要做两次选择才能进入可操作页面。这就违背了“尽可能少的安排操作步骤”这一原则。如果使用JavaScript制作二级菜单,避免请求服务器,会好一些。如果二级菜单项总共不超过20个左右,不妨将二级菜单直接显示出来,比如放在左列一字向下排开,这样只需要一次选择到可操作项,更加明了方便。
9. 操作逻辑无漏洞,保证数据是操作安全的
多个页面间的操作和同个页面上的多个操作间的逻辑关系在设计上是安全和严谨的。保证不会出现不被允许的用户操作组合,至少不会因为用户的不适当的操作导致出错。
这最典型的表现则是在页面上广泛采用的所谓联动下拉框设计。一个下拉框中允许的选项受另一个下拉框中的选择而变。另外一个例子是根据选择使表单元素有效或者失效。如果在多个页面间也要维持某种合法性逻辑,那么就需要服务器端脚本的参与。这样会使表单设计跟操作有关,应该说这不是一个好的设计。可以通过变更操作步骤顺序、组合方式来尽可能避免这种情况出现。
操作逻辑的设计既要保证用户任意的输入不会导致错误,也要保证是用户输入的数据能购被安全处理。在Session控制下的表单中输入大幅文字可能会导致超时出错,这时候往往还伴随重定向过程,导致用户的长篇输入荡然无存。用JavaScript提醒用户已超时,请保存输入后重新提交,是一个好办法。某些表单元素如<-input type=”text”>接受ESC键清除数据,并且无法撤销,这也是很危险的。在中文输入法中常常使用ESC键清楚输入的码位,一旦不小心多按一下ESC就会使得输入数据消失。因此有必要用JavaScript禁用<-input>和<-textarea>的ESC键处理过程。
发表评论
-
VS C++配置JNI
2012-12-22 00:22 2840在Microsoft Visual Studio 10.0\V ... -
keytool工具使用详解
2012-12-16 20:36 25841、生成密钥,并以证 ... -
c和java混编
2012-11-27 22:25 2566java中调用c语言 首先编写Main.java publ ... -
android应用发布报错处理
2012-11-18 14:18 1113错误为: Installation failed due ... -
android 环境下使用cocos2d-x的环境配置步骤
2012-08-09 17:57 1098一、准备工作 准备必要工具主要有三个(NDK,Cygwin和 ... -
性能监控之监控SQL语句
2012-05-28 09:54 803分析表 analyze table tablename com ... -
oracle数据库分析响应时间
2012-03-07 12:40 2140--查看数据库响应状况 select * from SYS ... -
java中String\十六进制String\byte[]之间相互转换函数
2011-05-04 20:29 6742public static String stringToH ... -
Oracle数据库分区表操作方法
2011-04-06 16:05 1483在大型的企业应用或企业级的数据库应用中,要处理的数据量通 ... -
更改oracle用户密码
2011-02-07 09:42 923alter user sys identified by sy ... -
Jbpm4常用操作
2010-08-12 15:23 1407一、流程定义 1.部署流程定义 ProcessEng ... -
Javascript动态生成表格的性能调优
2010-07-14 16:19 1646客户端动态输出table数据并展示表格,是web应用中较为常见 ... -
mysql 操作日志查看
2010-07-09 15:36 1741对my.ini文件进行设置 [mysqld] basedi ... -
mysql 操作日志查看
2010-07-09 15:34 1553对my.ini文件进行设置 [mysqld]basedi ... -
使用Javascript动态创建表格,不同的方法,巨大的运行时间差异!
2010-06-30 13:34 809本来是想测试一下使用Javascript生成一个比较大的表格, ... -
PureMVC实例分析笔记
2010-06-25 18:00 0PureMVC的核心 一:Model保存对Proxy对象 ... -
flex学习网站
2010-06-22 17:25 01:http://www.davidtucker.net/ca ... -
谈Flash中的鼠标响应
2009-01-14 12:55 1439大家都知道,Flash动画 ... -
Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
2008-12-14 16:45 1815Javascript 操作select是表单中常见的一种,今天 ... -
MyEclipse 快捷键大全
2008-12-04 23:19 963(1)Ctrl+M切换窗口的大 ...
相关推荐
【WEB交互界面设计和验收的指导性原则】 随着互联网技术的快速发展,WEB交互界面成为了日常工作、商务、教育、娱乐等活动的重要平台。为了提供优质的用户体验,设计师必须遵循一系列原则,确保界面易于使用、高效且...
"web设计文档"通常包括了整个设计过程中的各个关键步骤和技术,旨在为学习者提供指导和实践标准。这份"web课程设计文档"可能是为了教育目的,帮助学生理解和掌握Web设计的基本原理和实践技巧。 1. **Web设计基础**...
总的来说,"JSP+SQL基于WEB的开放性实验管理系统设计与实现"项目是一次全面的Web开发实践,涉及到了从需求分析、系统设计、编码实现到测试验收的完整流程,对于学习和提升Web开发技能具有很高的参考价值。
各功能模块的具体实现细节在此部分展开,包括各个模块的操作流程、功能逻辑和交互设计。 5.2 业务流程分析 描述用户如何通过系统完成各项任务,如添加客户信息、发布公告、审批服务请求等,以及后台如何处理这些...
4. **界面设计**:用户界面设计应关注用户体验,简洁易用,遵循人机交互原则。此外,还应考虑到不同平台和设备的适配性,如Web、移动端和桌面端。 5. **数据设计**:数据库设计包括概念模型设计(ER图)、逻辑模型...
10. **用户体验设计**:考虑用户界面的易用性、美观性和交互性,以及无障碍设计原则,以提高用户满意度。 压缩包内的文件"2014年上半年 软件设计师 案例分析.docx"很可能包含了对上述部分或全部知识点的深入探讨和...
4.1 设计原则:界面应清晰、直观,遵循一致性、反馈、容错和效率原则。 4.2 界面元素:包括导航菜单、表单、按钮、提示信息等,需符合人机交互设计规范。 五、逻辑架构 5.1 描述系统的主要组件及其相互关系,如前端...
在这个项目中,作者利用ASP技术和相关数据库管理工具,构建了一个功能完善的病历管理系统,旨在提升医院信息化管理水平,确保医疗数据的安全性和易用性。 首先,系统的开题报告部分通常会阐述选题背景、研究目的和...
4. **MySql数据库**:作为后台数据库的选择,MySql是一种开源、轻量级的关系型数据库管理系统,因其高效、稳定和易用性而广泛应用于Web应用程序。 5. **电子商务(E-commerce)**:论文强调了电子商务在现代社会的...
通过以上分析,易换二手商品置换销售平台的设计与开发旨在构建一个集易用性、安全性和效率于一体的线上二手商品交易平台。它不仅能满足用户的购物需求,还能提高管理员的管理效率,是适应现代社会快速发展的有力工具...
通常,界面设计应简洁易用,确保学生能够快速找到所需信息并完成操作。 4. 数据处理层:这部分主要处理用户请求,如验证用户身份、执行选课操作、处理并发请求等。ASP脚本在此层编写业务逻辑,确保系统的稳定性和...
6. **用户体验(UX)与用户界面(UI)设计**:良好的网站设计不仅关乎美观,更关乎易用性。论文应探讨UX和UI原则,如色彩搭配、布局、响应式设计,以及如何通过原型设计和用户反馈来改进设计。 7. **Web标准与最佳...
《CxServer-0.9.16:科研协作与...其背后的技术基础——C++和Wt,保证了系统的高性能和易用性,使得科研管理工作变得更加高效和便捷。未来,随着技术的不断进步,我们有理由期待CxServer在科研协作领域发挥更大的作用。
55. **软件产品质量特性**包括功能性、可靠性、易用性、效率、维护性和移植性。 56. **软件质量保证**确保软件满足规定质量标准,任务包括质量计划、质量控制和质量改进。 57. **软件质量保证体系**是组织的质量...
- 易用性:界面友好,操作直观,提供清晰的使用指南。 - 可维护性:代码结构清晰,文档齐全,便于后续维护和修复。 4. 系统设计 系统采用微服务架构,将核心功能模块化,提高可复用性和可扩展性。前端采用响应式...
- **易用性**:系统界面友好,操作简单,使用户能够快速上手。 - **安全性**:确保系统数据的安全,防止未经授权的访问。 - **可扩展性**:系统设计灵活,方便后续功能的添加或调整。 - **高效性**:优化系统性能,...
同时,需求分析还需考虑网站的易用性、安全性以及对不同设备的适应性。 〔二〕可行性分析: 可行性分析涉及技术可行性、经济可行性和操作可行性。技术上,现有的Web开发技术和数据库管理系统可以支持网站的建设;...
- 易用性:确保用户能够轻松找到所需信息和服务。 - 高可维护性:便于后期的技术升级和功能扩展。 - 可用性和可靠性:保证系统7×24小时稳定运行。 - 先进性:采用当前主流的技术框架和工具。 - 标准化与开放性...
在这个系统中,我们关注的核心知识点包括系统架构设计、需求分析、数据库设计、用户界面(UI)设计、前后端分离技术、接口开发以及安全性与性能优化。 1. **系统架构设计**:E5采购系统可能采用三层架构,包括表现层...