停止输入/返回键提交表格

我在表格中有一张桌子。 该表包含一些表单字段,但表格外部还有表单字段(但仍在表单中)。

我知道Enter和Return传统上用于通过键盘提交表单,但我想停止表中字段的这种行为。 例如,如果我将一个字段集中在表中并按Enter / Return,则不会发生任何事情。 如果我将一个字段聚焦在表格之外(但仍然在表格内),那么它就像正常一样提交。

我有一个针对此表的jQuery插件。 简而言之,这就是我迄今为止所尝试过的:

base.on('keydown', function(e) { if (e.keyCode == 13) { e.stopPropagation(); return false; } }); 

其中base是表jQuery对象。 这是我的插件的init方法。 但是,按Enter键仍会提交表单。

我哪里错了?

编辑:一些简化的HTML:

 

 base.keypress(function(e) { var code = e.keyCode || e.which; if(code == 13) return false; }); 

或仅用于输入:

 $(':input', base).keypress(function(e) { var code = e.keyCode || e.which; if(code == 13) return false; }); 

e.preventDefault()而不是e.stopPropagation() 。 stopPropagation仅阻止它冒泡到更高的DOM节点,它不会阻止默认操作。

我猜猜一个表单元素会触发提交事件,它不会通过表格和表单冒泡,试试这个实例:

 $('input, select, textarea', base).on('keydown', function(e) { if (e.keyCode == 13) { return false; } }); 

注意我们还为选择器提供了上下文,因此这个keyDown只会出现在表中的元素(根据需要修改)上。

正如gordan在另一条评论中所说,return false同时执行.preventDefault().stopPropagation()

我发现这个Q / A试图解决类似的情况,我有多种forms,输入不会做我想要的。 在我的具体情况下,我会动态添加一个新的

D1,D2,D3等,每个新div都有一个表单,可以从创建它的同一个php代码重新加载该div,也只是用POST。

无关的第一个问题是我无法用每个div动态创建一个新函数,所以我将D1等描述符作为参数传递给Javascript函数:

  

您将看到必需的event.preventDefault();return false; 适用于此主题中的答案。 它对我不起作用。 如果我在任何一个表单中单击“提交”,那么将使用正确的数据重新加载一个div。 按Enter键将导致默认操作并重新加载整个页面,只留下1个div。

这个答案有效 :我需要一个唯一的ID和NAME用于不同的表格。 最初,它们是但是一旦我添加了唯一ID和NAMES,例如“formD1”,等等,这一切都开始正常工作。

这对我有用。

 $("input[type='text']").on('keypress', function(e) { return e.keyCode != 13; }); 

只需将下面的代码放在模板文件或页眉中。