停止输入/返回键提交表格
我在表格中有一张桌子。 该表包含一些表单字段,但表格外部还有表单字段(但仍在表单中)。
我知道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; });
只需将下面的代码放在模板文件或页眉中。