我在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 并将焦点设置在正确的提交上并不起作用。
是否有任何方法,可以使用 JavaScript 或其他方式在 HTML 表单的文本输入框中,选择将要使用哪个提交按钮?
编辑:为了澄清,表单不能基本上需要 JavaScript 才能“工作”。我不介意在 WebKit 浏览器中,如果按回车键提交是不希望的,但我不能移除或更改提交按钮的顺序。
这是我尝试过的内容,但它无法改变在 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;
}
}