HTML表单上的多个提交按钮 - 默认指定一个按钮

Sal*_*n A 126 html css forms submit-button

我的表单有三个提交按钮,如下所示:

<input type="submit" name="COMMAND" value="&lsaquo; Prev">
<input type="submit" name="COMMAND" value="Save">
<input type="reset"  name="NOTHING" value="Reset">
<input type="submit" name="COMMAND" value="Next &rsaquo;">
<input type="button" name="NOTHING" value="Skip &rsaquo;" onclick="location = 'yada-yada.asp';">
Run Code Online (Sandbox Code Playgroud)

按钮行是提交,重置和javascript按钮的混合.按钮的顺序可能会发生变化,但无论如何,保存按钮仍保留在prev按钮和下一个按钮之间.这里的问题是当用户点击"enter"提交表单时,post变量"COMMAND"包含"Prev"; 正常,因为这是表单上的第一个提交按钮.但是,当用户通过输入按钮提交表单时,我希望触发"下一步"按钮.有点像将其设置为默认提交按钮,即使它之前还有其他按钮.

bob*_*nce 80

第一个按钮始终是默认按钮; 它无法改变.虽然您可以尝试使用JavaScript进行修复,但表单在没有脚本的情况下会在浏览器中出现意外行为,并且需要考虑一些可用性/可访问性角落情况.例如,Zoran链接的代码会意外地在Enter中输入表单<input type="button">,这通常不会发生,并且不会捕获IE在表单中提交表单中的其他非字段内容的行为.因此,如果您<p>使用该脚本单击表单中的某些文本并按Enter,则会提交错误的按钮...如果在该示例中给出了真正的默认按钮是"删除",则特别危险!

我的建议是忘记使用脚本黑客来重新分配默认值.继续使用浏览器的流程,然后首先放置默认按钮.如果您无法破解布局以获得所需的屏幕顺序,那么您可以通过在源中首先使用虚拟隐形按钮来实现,其名称/值与您想要默认的按钮相同:

<input type="submit" class="defaultsink" name="COMMAND" value="Save" />

.defaultsink {
    position: absolute; left: -100%;
}
Run Code Online (Sandbox Code Playgroud)

(注:定位是用来推离屏幕上的按钮,因为display: nonevisibility: hidden对按钮是否被视为默认值,不管是提交浏览器的可变的副作用.)

  • 第一个按钮是默认的,但可以更改:-).对非默认按钮使用type =按钮,为默认按钮键入= submit(示例如下:http://stackoverflow.com/a/24245422/774971) (10认同)
  • 在你的领导下,我找到了以下工作:`<input type ="submit"name ="..."value ="..."style ="display:none;" />`放在`<form>`标签下面,复制表格后面出现的可见按钮. (6认同)
  • @dmitry_romanov + 他的评论支持者:不,根据 @spikyjt 的评论(上面的某处),`type=button` 将*不会*提交表单,因此不会解决 OP 的问题。 (2认同)

cle*_*tus 73

我的建议是不要打击这种行为.您可以使用浮动有效地更改订单.例如:

<p id="buttons">
<input type="submit" name="next" value="Next">
<input type="submit" name="prev" value="Previous">
</p>
Run Code Online (Sandbox Code Playgroud)

有:

#buttons { overflow: hidden; }
#buttons input { float: right; }
Run Code Online (Sandbox Code Playgroud)

将有效地反转顺序,因此"下一步"按钮将是通过按Enter键触发的值.

这种技术将涵盖许多情况,而不必诉诸更多hacky Javascript方法.

  • 我设法将下一个按钮向右推(1)向右浮动(2)所有其他按钮向左浮动(3)所有按钮显示块(4)所有按钮,包括按源顺序指定的下一个按钮. (2认同)
  • 这个解决方案的主要问题是它破坏了标签索引。使用 CSS 重新定位按钮不会改变它们的 tabindex 顺序。因此,按 Tab 键不会始终如一地从上/下、从左到右。有关解决此问题的解决方案,请参阅 http://stackoverflow.com/a/31911751/442472。 (2认同)

dmi*_*nov 36

设置type=submit为您想要默认的type=button按钮和其他按钮.现在,在下面的表单中,您可以在任何输入字段中按Enter键,Render按钮将起作用(尽管它是表单中的第二个按钮).

例:

    <button id='close_button' class='btn btn-success'
            type=button>
      <span class='glyphicon glyphicon-edit'> </span> Edit program
    </button>
    <button id='render_button' class='btn btn-primary'
            type=submit>             <!--  Here we use SUBMIT, not BUTTON -->
      <span class='glyphicon glyphicon-send'> </span> Render
    </button>
Run Code Online (Sandbox Code Playgroud)

在FF24和Chrome 35中测试过.

  • 除了`type ="按钮"`不提交表格.这里的要求是其他按钮仍然提交表单,但不是默认的.需要额外的javascript才能让他们提交表单,这意味着最好使用CSS重新定位. (16认同)

sco*_*y86 35

Quick'n'dirty你可以创建一个隐藏的提交按钮副本,当按下回车键时应该使用它.

示例CSS

input.hidden {
    width: 0px;
    height: 0px;
    margin: 0px;
    padding: 0px;
    outline: none;
    border: 0px;
}
Run Code Online (Sandbox Code Playgroud)

示例HTML

<input type="submit" name="next" value="Next" class="hidden" />
<input type="submit" name="prev" value="Previous" />
<input type="submit" name="next" value="Next" />
Run Code Online (Sandbox Code Playgroud)

如果某人现在点击您的表单,则(隐藏)下一步按钮将用作提交者.

在IE9,Firefox,Chrome和Opera上测试过

  • 我唯一的其他建议是确保您解决可访问性问题和tabindex问题.由于按钮在技术上并未隐藏,实际上只有屏幕阅读器和辅助设备才能识别按钮.按钮原样仍然是可列表的.设置tabindex =" - 1"可以纠正这一点. (3认同)
  • 要从辅助工具(屏幕阅读器)隐藏按钮,请将"role = none"添加到其属性中. (2认同)

Dav*_*ave 28

如果您正在使用jQuery,那么此处发表的评论的解决方案非常灵活:

$(function(){
    $('form').each(function () {
        var thisform = $(this);
        thisform.prepend(thisform.find('button.default').clone().css({
            position: 'absolute',
            left: '-999px',
            top: '-999px',
            height: 0,
            width: 0
        }));
    });
});
Run Code Online (Sandbox Code Playgroud)

只需添加class="default"到您想要的默认按钮即可.它将该按钮的隐藏副本放在表单的开头.


Sha*_*rde 5

我正在复活这是因为我正在研究一种非JavaScript的方法来做到这一点。我没有进入关键处理程序,并且CSS定位的东西导致制表符顺序中断,因为CSS重新定位不会改变制表符顺序。

我的解决方案基于/sf/answers/664379901/上的响应。

解决方案的来源如下。tabindex用于纠正隐藏按钮的选项卡行为以及aria-hidden以避免屏幕阅读器读出按钮/由辅助设备识别按钮。

<form method="post" action="">
  <button type="submit" name="useraction" value="2nd" class="default-button-handler" aria-hidden="true" tabindex="-1"></button>
  <div class="form-group">
    <label for="test-input">Focus into this input: </label>
    <input type="text" id="test-input" class="form-control" name="test-input" placeholder="Focus in here and press enter / go" />
  </div>
Run Code Online (Sandbox Code Playgroud)

DOM中的第一个按钮DOM中的第二个按钮DOM中的第三个按钮

此解决方案的基本CSS:

.default-button-handler {
  width: 0;
  height: 0;
  padding: 0;
  border: 0;
  margin: 0;
}
Run Code Online (Sandbox Code Playgroud)