Javascript 按Enter键输入文本时防止表单提交

Javascript 按Enter键输入文本时防止表单提交,javascript,html,forms,Javascript,Html,Forms,我知道以前有人问过这个问题,但我找不到一个适合我情况的满意答案。所以我再次问 我有一个简单的表单,有两个文本框和一个提交按钮。在用户在任一文本框中输入文本后,他们不能通过Enter键提交,只有submit按钮才允许他们提交。我认为捕获enter键并从onChange事件处理程序返回false会起到作用,但显然不行,这仍然会导致表单提交 function doNotSubmit(element) { alert("I told you not to, why did you do

我知道以前有人问过这个问题,但我找不到一个适合我情况的满意答案。所以我再次问

我有一个简单的表单,有两个文本框和一个提交按钮。在用户在任一文本框中输入文本后,他们不能通过Enter键提交,只有submit按钮才允许他们提交。我认为捕获enter键并从onChange事件处理程序返回false会起到作用,但显然不行,这仍然会导致表单提交

function doNotSubmit(element) {

        alert("I told you not to, why did you do it?");
        return false;

}
</script>


<form id="myForm" action="MyBackEnd.aspx" method="post">

<table>
    <tbody>
    <tr>
        <td>
          Joe:  <input id="JoeText" type="text" onChange="doNotSubmit(this)">
        </td>
        <td>
          Schmoe:  <input id="SchmoeText" type="text" onChange="doNotSubmit(this)"  >
        </td>
    </tr>
    </tbody>
</table>

<input type=submit>

函数不提交(元素){
警惕(“我告诉过你不要,你为什么这么做?”);
返回false;
}
乔:
施莫伊:

我在Chrome和FF(最新版本)上进行了测试

你能告诉我如何防止表格提交吗


谢谢。

我想这应该可以:

document.getElementById("myInput").onkeypress = function(e) {
     var key = e.charCode || e.keyCode || 0;     
     if (key == 13) {
        alert("I told you not to, why did you do it?");
        return false;
     }
}

如果包含“提交”按钮,则默认表单行为是按enter键提交。为了防止意外提交,您可以在onsubmit事件(表单a)中添加确认对话框。另一种选择是用您自己的(表格B)替换提交按钮。但是,用户需要单击按钮进行提交

运行代码段进行测试 (在Chrome、Firefox和IE 5-11中测试)


表格A:此表格按enter键提交

表格B:此表格仅在点击按钮时提交

要借助@Dasein的anwser,您希望阻止默认行为,而不是停止传播(即返回false):

document.getElementById(“myForm”).onkeypress=函数(e){
var key=e.charCode | | e.keyCode | | 0;
如果(键==13){
警惕(“我告诉过你不要,你为什么这么做?”);
e、 预防默认值();
}
}

乔:
施莫伊:

First的可能重复项,我想您需要的是onkeypress或onkeydown而不是onchange。其次,您的
doNotSubmit
函数中的
e
来自何处?不,很抱歉,它不起作用。表格仍然提交。但奇怪的是,我也没有看到警报。是的,我确实将getElementbyId的参数更改为“JoetText”。奇怪的是,它对我有效,您可以在这里查看:@Dasein和devkaoru,我认为您的建议会起作用,但现在当我按原样插入javascript时,它会使我的页面加载出现错误“document.getElementbyId(…)为null”。知道为什么会发生这种情况吗?我确信表单“myForm”的名称是正确的?您的脚本很可能是在DOM准备就绪之前加载的。使用on ready事件来防止此情况: