8

用户登录到他的控制面板并查看他的传入消息。每条消息附近都有一个“回复”按钮。实现该按钮的正确方法是什么?

我看到三个主要选项:

  1. 使用链接:

    <a href="customer.php?reply&messageid=1234">Reply</a>.
    

    坏处:

    • 我们需要将该链接的样式设置为看起来像一个按钮。因为我认为“回复”动作应该用一个按钮来表示,而不是一个链接(在我看来,链接应该在链接到某个资源并且链接文本中有名词时使用;如果我们想做出一个动作并在标题中有动词(动作) - 应该使用按钮)。

  1. 使用按钮:

    <button onclick="location.href='customer.php?reply&messageid=1234'">Reply</button>`  
    

    坏处:

    • 用户必须启用 JavaScript。尽管根据我们的统计数据,我们 99.8% 的用户都启用了 JavaScript,如果他们不这样做,他们将很难在我们的网站上工作(我们有许多使用 JavaScript 实现的功能)。所以我认为我们 100% 的实际活跃用户都启用了 JavaScript。

  1. 使用带有以下内容的表单<input type="submit">

    <form action="customer.php?reply" method="get">
      <input name="messageid" type="hidden" value="1234" />
      <input type="submit" value="Reply" />
    </form>
    

    坏处:

    • 我认为在这里使用表格是“人为的”。用户不输入任何内容。我们使用表单只是为了使我们的按钮工作。我还认为,当我们不更改任何内容而只需要向用户显示回复表单时使用 POST 请求 - 违反了 REST 原则。但即使使用 GET 我仍然认为在这种情况下使用表单是人为的。

其他一些注意事项:

  • 在链接中使用按钮在 IE 中不起作用。
  • 这是我们网站的私有部分,因此搜索引擎看不到它,我们真的不需要链接来帮助搜索引擎跟踪它并索引资源(这是在网络中使用链接而不是按钮的常见论点)

你会选择哪一个,为什么?

UPD。好吧,我决定使用链接。谢谢大家的讨论!

4

4 回答 4

9

我肯定会使用一个链接:渐进式增强

即使关闭了 Javascript,您也希望该按钮可用(请记住:在页面加载期间,每个用户都是非 javascript 用户。如果他们的连接速度较慢(例如移动设备),他们应该能够他们一看到按钮就回复)。

样式不是问题(您不会使用默认按钮样式,是吗?)。

当用户没有提交任何确定是错误的东西时使用 POST。即使使用 GET,它仍然不是真正的形式材料......

于 2012-07-12T22:35:17.740 回答
4

它很容易设置样式<a><button>同样,只需使用一个通用的类名。<input type="button">可能有点棘手,但您不需要使用它。

您的标签选择永远不应该由您的预期演示决定,而是由元素什么以及它的作用决定。链接应标记为 <a>.

于 2012-07-12T22:37:35.040 回答
1

我同意 aPOST是错误的。因此,将您的表单设置为使用method="get". 只使用一种形式并忽略隐藏字段。使用<button>,显示的文本可能与提交的值不同。

<form action="customer.php" method="get">
    <input type="hidden" name="reply" />
    <div class="message">
        <div class="messageBody">..</div>
        <button name="messageid" value="1234">Reply</button>
    </div>
    <div class="message">
        <div class="messageBody">..</div>
        <button name="messageid" value="1235">Reply</button>
    </div>
    ...
</form>
于 2012-07-12T22:49:43.823 回答
1

所有方法都是正确的,除了方法 2 仅在您可以安全地忽略非 JavaScript 浏览的假设下是正确的。

关于表格的假设和评论是不正确的,或者至少是误导性的。表单不需要涉及用户输入;表单可用于提交以前收集的数据,除了提交字段外没有其他字段。即使不改变任何东西,例如由于输入数据的数量(因为 GET 数据的上限相当低),也可以使用 POST 方法;此外,问题中显示的表单使用默认方法 GET。

否则,这主要是一个非建设性的问题,需要讨论和论证,而不是技术解决方案。

于 2012-07-13T08:09:13.740 回答