如果焦点不在提交按钮上,则表单不应在输入时提交

我有一个要求,即如果他按下回车键,用户就无法提交表格,除非重点放在提交按钮上。

使用下面的代码,我能够做到这一点,但现在的问题是,如果我有任何特定于任何字段的输入键事件(例如,如果我想将一个特殊要求的输入键事件附加到一个文本字段),它是因为我在下面写的脚本而不允许我..

 $(document).keydown(function(event) { if (event.keyCode == 13) { var $focusedItem = $(document.activeElement); if($focusedItem.is("button") || $focusedItem.is("a") || $focusedItem.attr("type") == "submit") { $focusedItem.click(); } else { event.preventDefault(); } } });  

我可以限制用户在按下回车键时提交表单的任何解决方案,如果焦点不在提交按钮上,但同时如果任何表单字段附加任何回车键事件,那也应该有效。

如果你创建了一个JsFiddle,它会更容易提供帮助。 但是,我认为你应该这样做:

 if($focusedItem.attr('id') == 'submitButton') { if (event.keyCode == 13) { submit the form } }else if ($focusedItem.attr('id') == 'Anothertextarea') { if (event.keyCode == 13) { do something special } }else{ if (event.keyCode == 13) { return null; } } 

删除行event.stopPropagation(); 从您的脚本中,您只需要preventDefault()(阻止提交)。

当你执行stopPropagation()时,你将停止元素上的所有其他按键事件。

试试看,看看它是否符合你的需求:

–DEMO–

 $(document).on('submit', 'form', function (e) { e.preventDefault(); }).on('click', ':submit', function (e) { if (!$(document.activeElement).is(':submit')) return; var form = $(this).closest('form').length ? $(this).closest('form')[0] : $('#' + $(this).attr('form'))[0]; form.submit(); }); 

也许我错过了这一点,这基本上是一个标准的HTML问题。

不要给表单提交操作(直接将其移动到按钮上的单击事件)并将所有按钮类型更改为按钮而不是提交。

我不记得是否只是从表单中删除提交就足够了。 如果没有那么只需执行onSubmit =“return false;” 我认为这样做。

然而,作为一个说明,对全球行为的要求可能是错误的,如果它对政府而言,那么你可能会遇到麻烦,因为它不符合可访问性指南。