如果用户在表单中按下“enter”键,我会使用此JavaScript代码提交最近的按钮:
jQuery.fn.installDefaultButton = function()
{
$('form input, form select').live('keypress', function(e)
{
if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
{
if ($(this).closest('form').find('button').size() <= 0)
{
return true;
}
var defaultButton = $(this).closest('form').find('button:first');
defaultButton.click();
$(this).blur();
return false;
}
else
{
return true;
}
});
return this;
};
如果启用了浏览器自动完成功能,并且用户通过按“输入”键选择了建议值,则表单将被提交。但这不是理想的行为。在这种情况下不应该提交。有没有办法阻止它?
编辑: 这是一个小例子:
<!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>
</head>
<body>
<form action="action.do">
<input name="input1"/>
<input name="input2"/>
<button type="submit" name="button_action1" class="button">Button 1</button>
<input name="input3"/>
<input name="input4"/>
<button type="submit" name="button_action2" class="button">Button 2</button>
</form>
</body>
答案 0 :(得分:1)
我没有机会试试这个,但它应该适合你。
$("form").live('change', function(e) {
$(this).data('changed', true);
});
$('form input, form select').live('keypress', function(e)
{
var form = $(this).closest('form');
if (((e.which && e.which == 13 || (e.keyCode && e.keyCode == 13)) && form.data('changed') == true)
{
if ($(this).closest('form').find('button').size() <= 0)
{
return true;
}
var defaultButton = form.find('button:first');
defaultButton.click();
$(this).blur();
console.log("Submitted!");
form.data('changed', false);
return false;
}
else
{
return true;
}
});
在自动填充上按Enter键不会触发更改事件(或者至少在我以前的经验中没有触发),所以当有实际有效的更改时,您将要发送它。可能存在这样的情况:当您单击要设置表单数据的单元格时,&#34;已更改&#34;要真实,但你需要进行实验,看看你是否得到了你期望的行为。
编辑:
告诉你我的意思
$("form").live('focus', function(e) {
$(this).data('changed', true);
});