当前位置: 首页 > 面试题库 >

如何确定HTML表单上的默认提交按钮?

苍兴怀
2023-03-14
问题内容

如果提交表单但未通过任何特定按钮提交,例如

  • 通过按 Enter
  • HTMLFormElement.submit()在JS中使用

浏览器应如何确定按下多个提交按钮(如果有)中的哪个?

这在两个层面上都很重要:

  • 调用onclick附加到提交按钮的事件处理程序
  • 数据发送回Web服务器

到目前为止,我的实验表明:

  • 按下时Enter,Firefox,Opera和Safari使用表单中的第一个提交按钮
  • 按下时Enter,IE会使用第一个“提交”按钮,或者根本不使用任何按钮,这取决于我无法弄清楚的情况
  • 所有这些浏览器完全不使用JS提交

标准怎么说?

如果有帮助,这是我的测试代码(PHP仅与我的测试方法有关,与我的问题本身无关)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>

<body>

<h1>Get</h1>
<dl>
<?php foreach ($_GET as $k => $v) echo "<dt>$k</dt><dd>$v</dd>"; ?>
</dl>

<h1>Post</h1>
<dl>
<?php foreach ($_POST as $k => $v) echo "<dt>$k</dt><dd>$v</dd>"; ?>
</dl>

<form name="theForm" method="<?php echo isset($_GET['method']) ? $_GET['method'] : 'get'; ?>" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
    <input type="text" name="method" />
    <input type="submit" name="action" value="Button 1" onclick="alert('Button 1'); return true" />
    <input type="text" name="stuff" />
    <input type="submit" name="action" value="Button 2" onclick="alert('Button 2'); return true" />
    <input type="button" value="submit" onclick="document.theForm.submit();" />
</form>

</body></html>

问题答案:

如果您通过Javascript(即提交表单formElement.submit()或任何等价物),然后
的提交按钮被认为是成功的,没有它们的值都包含在提交的数据。(请注意,如果您使用提交表单,submitElement.click()那么您所引用的提交就被认为是活动的;这并没有真正落到您的问题的范围之内,因为此处的提交按钮是明确的,但我想我应该将其包括在内对于那些阅读了第一部分的人,并且想知道如何通过JS表单提交成功地完成一个提交按钮。当然,表单的onsubmit处理程序仍然会以这种方式触发,而他们不会通过,form.submit()因此这是另一回事了……)

如果在非textarea字段中通过按Enter提交表单,则实际上取决于用户代理在此处确定所需内容。该规范不说有关使用输入在文本输入字段键的同时提交表单什么(如果你标签的按钮,使用空间或任何激活它,然后还有为特定的提交按钮是没有问题的明确使用)。它只说要激活一个提交按钮就必须提交一个表单,甚至不需要输入例如文本输入就可以提交该表单。

我相信InternetExplorer会选择源中最先出现的“提交”按钮;我觉得Firefox和Opera选择的TabIndex最低的按钮,如果没有其他定义,则会退回到第一个定义的按钮。关于提交者是否具有非默认值属性IIRC,还存在一些复杂问题。

要解决的问题是,这里没有定义明确的标准,这完全取决于浏览器的想法-
因此,无论您在做什么,都应尽可能避免依赖任何特定的行为。如果您真的必须知道,您可能可以找出各种浏览器版本的行为,但是当我前一段时间进行调查时,存在一些相当复杂的条件(当然,这些条件可能会随新的浏览器版本而改变),我建议您尽可能避免它!



 类似资料:
  • 问题内容: 我有一个包含三个提交按钮的表单,如下所示: 按钮行混合了提交,重置和JavaScript按钮。按钮的顺序可能会更改,但是在任何情况下,保存按钮都将保留 在上一个和下一个按钮之间。 这里的问题是,当用户点击Enter提交表单时,帖子变量“ COMMAND”包含“ Prev”;正常,因为这是表单上的第一个提交按钮。但是,我希望在用户通过Enter按钮提交表单时触发“下一步” 按钮。这有点像

  • 问题内容: 我有一个表格。在该表格之外,我有一个按钮。一个简单的按钮,如下所示: 但是,当我单击它时,它会提交表单。这是代码: 该按钮应该做的就是编写一些JavaScript。但是,即使看起来像上面的代码一样,它也会提交表单。当我将标签按钮更改为跨度时,它可以完美工作。但不幸的是,它必须是一个按钮。有什么办法可以阻止该按钮提交表单?像例如 问题答案: 我认为这是HTML最令人讨厌的小特性。该按钮必

  • 我有几个提交按钮的形式。如何确定在"之前提交"回调哪个按钮开始提交表单? 不幸的是,不包含任何提交按钮字段。 康科尔。对数(arr) 我只有一个表单,该表单有两个提交按钮 表单如下所示:

  • 问题内容: 假设您以HTML表单创建向导。一键向后退,一键向前。当您按下时,由于 后退 按钮首先出现在标记中,它将使用该按钮提交表单。 例: 我想确定当用户按下时使用哪个按钮提交表单。这样,当您按下向导时,向导将移至下一页,而不是上一页。您是否必须使用此功能? 问题答案: 我希望这有帮助。我只是在按右边的按钮。 这样,按钮位于按钮的左侧,但在HTML结构中排在第一位: 优于其他建议的好处:没有Ja

  • 问题内容: 我在将CSS表单的HTML表单提交按钮居中时遇到麻烦。 现在我正在使用: 这个CSS内容 而且它什么也没做。我知道我可能在做一些愚蠢的错误。我怎样才能解决这个问题? 问题答案: 我只是将div包裹在它们周围,并使其居中对齐。那么您不需要按钮上的任何CSS即可将它们居中。

  • 问题内容: 如果我有这样的表格: 如何提交而不通过JavaScript / Jquery重定向到另一个视图?我从StackOverflow阅读了很多答案,但是所有这些答案都将我重定向到POST函数返回的视图。 问题答案: 为了实现您想要的,您需要使用jquery ajax,如下所示: 更新:( 基于下面的评论) 试试这个: UPDATE 2 (OP添加了此部分,因为这是他的最终解决方案) 这完美无