防止用户通过按回车键提交表单 #2

6

之前我曾经问过同样的问题,但是得到的答案不能防止用户在文本框中提交表单。

所以基本上我需要的是能够阻止用户提交表单,除非他们明确地点击了提交按钮。

编辑:

基本上这样做的主要原因是这是一项雇主调查。参与者不会是最技术娴熟的人,我的客户已经要求这样做。


你是指<textarea>吗?在<textarea>中的默认操作是插入换行符,而不是提交表单。 - user83632
不,我的意思是一个文本框。另外,使用前面问题中的代码并不能防止他们在选择单选按钮时按回车键。 - DForck42
6个回答

6
$('input').keydown(function(e){
    return e.keyCode !== 13;
});

顺便说一下,我不建议这样做。

在IT技术领域,不建议采取这种方式。

https://dev59.com/NnNA5IYBdhLWcg3wmfO5#895231 是原始问题,似乎并没有解决他的问题。 - user83632

5
我将表单设置为onsubmit =“return false”,并执行了以下操作。
<input type="button" value="Submit" onClick="document.Survey.submit()" style="font-size: 1.25em;">

1

我建议使用一个onsubmit处理程序以防止表单被提交(返回false),并在单击按钮时使用javascript来提交表单。

<form action="accion.htm" onsubmit="return false;">
    <input type="text" name="pepe" />
    <a onclick="this.parentNode.submit();" href="javascript:;">submit</a>
</form>

请注意,这只是一个示例,事件处理程序不应内联添加,而且只有当<a>是表单的直接子元素时,this.parentNode.Submit()才有效。

0

从哲学上讲,我同意那些说“你为什么要这样做”的人的观点。但我也有人向我询问此行为,所以我和你一样。

我以前用过Thirster42的方案,但只适用于GET,不适用于POST。它似乎还因浏览器而异--当用户在文本框中按回车键时,Firefox不会提交表单,但是Safari会。(Firefox 3.5.3,Safari 4.0.3,MacOSX)

我在网上看到的大部分都像this: “问:我该怎么办?答:基本上,你不应该。”我认为这是因为该行为在平台和Web浏览器之间不一致,并且对Firefox有效的方法可能对IE或Opera无效。另外,如果用户在浏览器中禁用了javascript,则不能依赖javascript。

所有这些都说了,这是我从这里和其他地方借鉴的,似乎可以工作。在Firefox、Safari和IE 8中进行了测试。头部JavaScript代码:

function disableEnterKey(e)
{
   var key;
   if(window.event)
      key = window.event.keyCode;     // IE 
   else
      key = e.which;     // Firefox
   if(key == 13)
      return false;
   else
      return true;
 }

然后在每个输入字段上:

:onKeyDown "return disableEnterKey(event);"

我不太喜欢它,但如果它能让人们开心...


我以前尝试过类似的东西,但似乎不想为我工作(无法使代码运行,或者是糟糕的代码。我不知道JavaScript的各个方面)。而且,使用你的实现方式,我必须将其放在每个输入字段上。我的调查大约有300个需要这样做。它还依赖于JavaScript,因此这个方面并没有真正改变。 - DForck42
我同意,我不喜欢依赖Javascript。据我所知,否则没有可靠的跨浏览器方法。至于“将其放在每个输入字段上”...您是手动编写这些字段还是以编程方式进行操作?即使您手动编写输入字段的文本,这也不是太大的负担。只需在顶部添加一个javascript位,并使用字符串替换将43个字符添加到每个输入字段的末尾... - Michael H.

0

为什么需要这样做?

在Web表单上通过按下回车来提交表单是标准的预期行为。

如果您想确保他们在填写或选择所有选项之前不会意外地提交表单,请使用验证JavaScript函数,检查表单上所有字段中的条目。 如果有缺失的内容,请弹出警告框告诉他们缺少了什么,然后返回false。(将onsubmit='myValidateForm();'选项添加到表单标签中)

如果填充了所有必需的数据,则可以使用回车以及单击按钮提交表单,不应该存在问题。


如果您在一个<FORM>中有两个逻辑表单,用户甚至不会知道它们是分开的。当您需要页面在禁用JavaScript的情况下工作时,这通常是必需的。 - Simon_Weaver

0
如果一个表单只有一个文本输入框,并且用户在该输入框内按下回车键,则根据HTML4规范,表单将被提交。最简单的防止这种情况发生的方法是添加另一个隐藏的文本输入框。

有大量的文本框,加上单选按钮和一些复选框。 - DForck42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接