按钮与链接vs输入类型=“提交”在表单上

时间:2012-07-12 22:31:42

标签: javascript html forms button hyperlink

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

我看到三个主要选项:

  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,我仍然认为在这种情况下使用表单是人为的。
      2. 其他一些说明:

        • 使用链接内的按钮在IE中不起作用。
        • 这是我们网站的一个私人部分,所以搜索引擎看不到它,我们真的不需要一个链接来帮助搜索引擎跟随它并索引资源(这是在网络中使用链接而不是按钮的常用参数)

        您会选择哪一个?为什么?

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

4 个答案:

答案 0 :(得分:9)

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

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

样式是一个非问题(你不会使用默认的按钮样式,不是吗?)。

当用户未提交任何内容时使用POST确定是错误的。即使使用GET,它仍然不是真正的材料......

答案 1 :(得分:4)

相同地设置<a><button>的样式非常容易,只需使用公共类名称即可。 <input type="button">可能有点棘手,但您不需要使用它。

您的代码选择永远不会由您的预期演示文稿决定,但 元素 链接应标记为 <a>

答案 2 :(得分:1)

我同意POST错了。因此,请将表单设置为使用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>

答案 3 :(得分:1)

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

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

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