我在 HTML 页面上有一个表单,其中包含执行不同操作的多个提交按钮。但是,当用户在文本输入中键入一个值并按 Enter 键时,浏览器通常会表现得好像下一个提交按钮按顺序被激活了一样。我想要一个特定的动作发生,所以我发现的一个解决方案是在有问题的文本输入之后直接将不可见的提交按钮放入 HTML 中,如下所示:
<input type="text" name="something" value="blah"/>
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input type=submit name="something_else" value="Destroy Earth" />
...
<input id="foobar" type=submit name="desired" value="Save Earth" />
这在大多数浏览器中就像一个魅力,除了它在 Safari 和 Chrome 等 webkit 浏览器中没有。出于某种原因,他们跳过了不可见的提交按钮。我一直在试图弄清楚如何拦截输入键并使用 Javascript 激活正确的提交,但我无法让它工作。拦截 keydown 并将焦点设置在正确的提交上不起作用。
当用户在 HTML 表单的文本输入中按下回车键时,是否有任何方法使用 Javascript 或其他方式来选择将使用哪个提交按钮?
编辑:为了澄清,表单不能要求Javascript从根本上“工作”。我不在乎在 webkit 浏览器上没有 Javascript 时是否不希望输入键提交,但我无法删除或更改提交按钮的顺序。
这是我尝试过的,它不会改变 webkit 浏览器中的提交行为。
有效的方法是将以下代码中的focus()更改为click()。
document.onkeypress = processKey;
function processKey(e)
{
if (null == e)
e = window.event ;
if (e.keyCode == 13) {
document.getElementById("foobar").click(); // previously: focus()
}
}
编辑:最终解决方案:
适用于所有浏览器,仅在需要时拦截回车键:
HTML:
<input type="text" name="something" value="blah"
onkeydown="return processKey(event)" />
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input type=submit name="something_else" value="Destroy Earth" />
...
<input id="foobar" type=submit name="desired" value="Save Earth" />
Javascript:
function processKey(e)
{
if (null == e)
e = window.event ;
if (e.keyCode == 13) {
document.getElementById("foobar").click();
return false;
}
}