我正在使用具有多个提交按钮的ASP.NET MVC网站。即。
<input type="submit" name="SubmitButton" value="Reset" />
<input type="submit" name="SubmitButton" value="OK" />
<input type="submit" name="SubmitButton" value="Back" />
我需要允许用户通过按“Enter”键快速提交表单。 HTML标准似乎指定如果用户按下“Enter”键,将假定第一个提交按钮。但是,我需要将第二个按钮(即“确定”)按钮设为默认按钮,并且由于我甚至不想谈论的原因,更改按钮顺序不是一个选项。
我搜索了一下,我发现this post关于在ASP.NET中使用Page.Form.DefaultButton,但这不适用于ASP.NET MVC。
我还尝试了以下javascript解决方案,虽然它在Chrome中有效,但在IE6中不起作用
$('body').keypress(function(e) {
if (e.which === 13) {
$("input[value='OK']").trigger('click');
}
});
我可以想到一些非常极端的解决方案,例如通过表单中的每个控件将上述函数附加到它们上面。但是,我不认为这是一个非常简洁的解决方案,所以我想知道有没有人有更好的解决方案?
答案 0 :(得分:35)
首先,这是错误的:
<input type="submit" name="SubmitButton" value="Reset" />
<input type="submit" name="SubmitButton" value="OK" />
<input type="submit" name="SubmitButton" value="Back" />
这三个都是提交按钮。复位是type =“reset”的输入。得到那个排序。其次,我已经成功实现了类似的东西,它适用于IE6。试试这个:
function keypressHandler(e)
{
if(e.which == 13) {
e.preventDefault(); //stops default action: submitting form
$(this).blur();
$('#SubmitButton').focus().click();//give your submit an ID
}
}
$('#myForm').keypress(keypressHandler);
当用户按下回车键时,focus()部分会使按钮显示为按下。相当漂亮。
答案 1 :(得分:10)
使用此功能。
$(function(){
$('input').keydown(function(e){
if (e.keyCode == 13) {
$("input[value='OK']").focus().click();
return false;
}
});
});
答案 2 :(得分:4)
您应该只有一个提交按钮。重置按钮应为type="reset"
,后退按钮可能应为type="button"
,如下所示:
<input type="reset" name="ResetButton" value="Reset" />
<input type="submit" name="SubmitButton" value="OK" />
<input type="button" name="BackButton" value="Back" />
然后,重置和确定将按照预期的方式工作,您只需要使用Javascript处理后退按钮。
修改:另一个选项是将重置和返回提交按钮分别放在iframe中各自的表单中。然后它们将被主窗体忽略,并且不会是默认按钮。此外,如果需要,这将允许您将它们指向不同的服务器操作,并且不会依赖Javascript来执行按钮操作。
答案 3 :(得分:3)
由于你使用jquery,如果使用hotkeys plugin,你可以采用这种方法:
$(document).bind('keydown', 'return', function (evt){
$.next("input[value='OK']").trigger("click");
return false;
});
答案 4 :(得分:3)
HTML标准似乎指明了这一点 第一个提交按钮将是 假设用户按下'Enter' 键。
不,没有定义enter键的用法,它是一个在各种解释下添加的propritary扩展。您将在不同的浏览器中获得不同的行为(当您开始混合使用不同的文化或UI约定时,从左到右/从右到左排序选项会变得非常危险)。
如果表单上只有一个按钮,那么所有主流浏览器都会遵循相同的行为 - 他们提交表单就好像按下了该按钮一样(表单数据中包含了buttonName = buttonValue)。当然,这并不意味着按钮onclick处理程序将触发 - 该行为是特定于浏览器的。
当有几个按钮时,这是一个完整的废话拍摄。某些浏览器决定第一个按钮(第一个按钮的定义可以变化 - 大多数使用Html树中提到的第一个按钮,而其他人尝试使用屏幕位置)被点击并在提交中使用它,而其他浏览器(特别是IE的某些版本)做出了同样正确的假设没有特定按钮被按下,因此不包括buttonName = buttonValue(表单的其余部分提交正常)
答案 5 :(得分:0)
在源中更改按钮顺序但不能直观地改变(即使用CSS交换按钮)?