防止表单提交(javascript)

IT技术 javascript forms submit
2021-03-13 04:50:03

我有一个带有文本输入的表单:

<form name="form1">
    <cfinput type="text" name="text1" id="text1" onChange="someFunc();">
</form>

我只希望它在某些情况下提交。(我先运行一些错误检查)

<script>
function someFunc() {
    if (1==2) {
    document.form1.submit();
} else {
            alert("Not submitting");
    }
</script>

问题是:即使警报触发得很好,但不知何故,表单仍在提交(除了那个之外没有其他提交语句!)。

非常感谢如果有人能对此有所了解。. .

3个回答

这种方法有一个根本的缺陷。您当前正在告诉表单,当text1发生更改时,请调用someFunc(). 如果为 true,则使用 JavaScript 提交表单。如果是假的,请继续您的业务。如果您在文本输入中按 Enter 键,表单仍会提交。如果有一个提交按钮被点击,表单仍然提交。

解决这个问题的基本方法是这样的:

<form name="form1" onsubmit="return someFunc()">
    <input type="text" name="text1" id="text1">
</form>

提交 from 后,调用someFunc(). 此函数必须返回 true 或 false。如果返回 true,则提交表单。如果为 false,则表单不执行任何操作。

现在您的 JavaScript 需要稍作改动:

<script>
function someFunc() {
    if (1==2) {
        return true;
    } else {
        alert("Not submitting");
        return false;
    }
}
</script>

当字段更改时,您仍然可以调用其他函数,但它们仍然不会管理表单的最终提交。事实上,someFunc()在向 onsubmit 事件返回 true 或 false 之前可以调用其他函数进行最终检查。

编辑: 关于隐式表单提交的文档。

编辑2:

这段代码:

$(document).ready(function(){ 
    $("#text1").on('change', function(event){ 
        event.preventDefault(); 
    }); 
});

正在停止change与该元素关联事件的默认处理如果你想影响submit事件,那么你可以这样做:

$(document).ready(function(){ 
    $("#form1").submit(function(event){ 
        event.preventDefault(); 
    }); 
});

这将允许您执行以下操作:

$(document).ready(function(){ 
    $("#form1").submit(function(event){ 
        if ( $('#text1').val() !== "foo" ) {
            alert("Error");
            event.preventDefault(); 
        }
    }); 
});
表单不需要提交按钮。当您在输入中按 Enter 键时,大多数浏览器都会提交表单。以这个评论表单为例:当我完成输入后,我可以单击“添加评论”或直接按 Enter 键,表单就会提交。可以捕获按下 Event 键的事件并阻止它提交表单,但它不经常使用,因为它会干扰用户的工作流程。当表单被提交时,可以使用“onsubmit”属性在表单标签中定义的提交事件被触发。
2021-04-23 04:50:03
非常感谢您的回复。但是,我仍然有几个问题: 1. 为什么我在文本输入中按回车就提交了表单?它不应该只在执行 document.form1.submit() 命令时提交吗?2. 我没有看到该方法的根本缺陷,因为没有提交按钮不是完全有效吗?我不想要提交按钮。我只想在文本框更改时提交,并且只有在文本有效时才提交。非常感谢您的反馈!
2021-04-28 04:50:03
知道了。这是非常有帮助的。任何想法为什么以下不起作用?: $(document).ready(function(){ $("#text1").onchange(function(event){ event.preventDefault(); }); });
2021-05-03 04:50:03
这与 ColdFusion 无关,这是核心 HTML 功能。onChange 仅在光标离开该特定输入并且该输入的值已更改时触发。在任何文本输入中按 Enter 都会自动在所有主要浏览器中触发表单提交。我在我的答案中添加了一个指向 HTML 规范的链接,特别是与表单提交有关。
2021-05-10 04:50:03
非常感谢。这很有帮助,但是表单从哪里得到它应该仅仅因为输入了 Enter 键而提交的想法?我没有具体说明。我只指定 onChange() 应该指向 someFunc()。如果我没有 onChange() 属性,那么表单不会因为我在文本输入中按 Enter 就考虑提交。你的意思是任何时候你有一个 onChange() 属性,Coldfusion(或 Javascript)都会自动添加提交?
2021-05-11 04:50:03
 var form = document.getElementById("Your Form ID");

 form.addEventListener("submit", function (e) {
      if ("Your Desired Conditions.") {
          e.preventDefault();
      }
 });

使用下面的代码它会工作得很好

<form onsubmit="return false;" >