jjzjj

javascript - 用于输入地址的自动完成文本框是个好主意吗?

coder 2024-07-15 原文

通过传统表格输入我的地址让我抓狂:

  • 既然可以从我的邮政编码推断出我的城市和州,为什么我必须输入我的城市、州、邮政编码?
  • 从下拉列表中选择您的状态是一件很痛苦的事情——通常您不能进入它,您必须使用鼠标等等。

alt text http://img10.imageshack.us/img10/7404/traditionaladdressform.png

因为我觉得这个过程非常令人反感,所以当我设计我的在线商店 (bombsheets.com) 时,我决定为地址构建一个自动完成小部件。在您输入时,我们会尝试对您的地址进行地理编码(通过 Google map ):

alt text http://img403.imageshack.us/img403/9333/addressautocomplete.png

在最好的情况下,这真的很有效。如果您的地址是“120 W 45th St, New York, NY 10036, USA”,您可以输入“120 w 45th st, nyc”这样的简短内容。

但是,据我所知,我们是唯一使用此界面的在线商店。我并没有因为自己是个天才而赞扬自己,而是很好奇它没有被使用是否意味着这个想法存在某种缺陷。一些潜在的问题:

  1. 太陌生了。客户已经习惯了旧的形式,改变旧形式会让人感到困惑。
  2. 您必须在不同的字段中输入您的公寓/楼层号/任何内容。这令人困惑。
  3. 当我们的商店崩溃时(好问题),我们将向 Google 发送过多的地理编码请求以使其无法扩展。
  4. 编辑:这不适用于(约 5% 的)禁用了 javascript 的用户。
  5. 这里没有什么大问题,这个界面就是 future 。 (这并不奇怪,因为例如,许多在线商店会强制您输入信用卡号和信用卡类型,而后者可以从前者推断出来)。

无论如何,基本上我很好奇这是我应该尝试创新的领域,还是我应该只使用传统方法。 (关于提高这种新方法的可用性的想法当然也很受欢迎)。

最佳答案

多个下拉菜单单个文本字段 的讨论引发了一些有趣的可用性讨论。通常使用单独的州和国家字段。所以你可能违反了“不要让我思考”的规则,但自动完成有助于解释需要什么。

Jakob Nielsen 认为地址的单一文本字段更易于用户使用:

Such information is often hardwired into users' fingers, and having to select such options from a menu breaks the standard paradigm for entering information and can even create more work for users (http://www.useit.com/alertbox/20001112.html)

另一方面,从固定列表中选择信息意味着出错的空间更小,有些人更喜欢使用鼠标(例如,那些人转到编辑菜单以访问复制和粘贴等命令)。

您需要判断您的目标受众并做出决定。

关于javascript - 用于输入地址的自动完成文本框是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185264/

有关javascript - 用于输入地址的自动完成文本框是个好主意吗?的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. 通过 MacPorts 的 RubyGems 是个好主意吗? - 2

    从MB升级到新的MBP后,Apple的迁移助手没有移动我的gem。我这次是通过macports安装ruby​​gems,希望在下次升级时避免这种情况。有什么我应该注意的陷阱吗? 最佳答案 如果你想把你的gems安装在你的主目录中(在传输过程中应该复制过来,作为一个附带的好处,会让你以你自己的身份运行geminstall,而不是root),将gemhome:键设置为您在~/.gemrc中的主目录中的路径. 关于通过MacPorts的RubyGems是个好主意吗?,我们在StackOverf

  4. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  5. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  6. ruby - "undefined method"用于 rails 模型 - 2

    我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

  7. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  8. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  9. Ruby:行 "m = Hash.new {|h,k| h[k] = []}"完成了什么而 "Hash.new"没有完成? - 2

    一边学习thisRailscast我从Rack中看到了以下源代码:defself.middleware@middleware||=beginm=Hash.new{|h,k|h[k]=[]}m["deployment"].concat[[Rack::ContentLength],[Rack::Chunked],logging_middleware]m["development"].concatm["deployment"]+[[Rack::ShowExceptions],[Rack::Lint]]mendend我的问题是关于第三行。什么是传递block{|h,k|h[k]=[]}到Has

  10. ruby-on-rails - Ruby "Undefined Method"用于类方法 - 2

    Ruby初学者努力简单地将这个@@people散列的值打印到控制台classPerson#haveafirst_nameandlast_nameattributewithpublicaccessorsattr_accessor:first_nameattr_accessor:last_name#haveaclassattributecalled`people`thatholdsanarrayofobjects@@people=[]#havean`initialize`methodtoinitializeeachinstancedefinitialize(first_name,last_

随机推荐