防止表单提交(javascript)

防止表单提交(javascript),javascript,forms,submit,Javascript,Forms,Submit,我有一个带有文本输入的表单: <form name="form1"> <cfinput type="text" name="text1" id="text1" onChange="someFunc();"> </form> 我只想在某些情况下提交。(我先运行一些错误检查) 函数someFunc(){ 如果(1==2){ 文件。表格1。提交(); }否则{ 警报(“未提交”); } 问题是:尽管警报触发得很好,但不知何故,表单仍在提交(除了一条

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

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

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


函数someFunc(){
如果(1==2){
文件。表格1。提交();
}否则{
警报(“未提交”);
}
问题是:尽管警报触发得很好,但不知何故,表单仍在提交(除了一条提交语句外,没有其他提交语句!)


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

这种方法有一个基本缺陷。您当前正在告诉表单,当
text1
更改时,请调用
someFunc()
。如果为true,则使用JavaScript提交表单。如果为false,则继续处理您的业务。如果在文本输入中按enter键,则表单仍会提交。如果单击了提交按钮,则表单仍会提交

实现这一点的基本方法如下:

<form name="form1" onsubmit="return someFunc()">
    <input type="text" name="text1" id="text1">
</form>
更改字段时仍可以调用其他函数,但它们仍然无法管理表单的最终提交。事实上,
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(); 
        }
    }); 
});

使用下面的代码,它将工作得非常好

<form onsubmit="return false;" >


Digital Chris的建议行得通,但这不是“最佳实践”。看看jQuery的事件。preventDafault()方法,并在验证返回true时让脚本提交表单。但我仍然建议查看下面的答案。非常感谢您的有用建议。1.我看不到Digital Chris的响应。2.我尝试使用preventDefault()但不起作用。3.为什么使用“默认值”对于要提交表单的文本输入集?OnChange()属性(指定的唯一操作属性)指向my someFunc()函数,该函数不调用document.form1.submit(),那么代码究竟从哪里得到了表单应该提交的想法呢?非常感谢您的澄清!非常感谢您的回复。但是,我仍然有几个问题:1.为什么表单提交仅仅是因为我在文本输入中点击了enter?它不应该只在文档中提交吗。form1.submit()命令已执行?2.我看不出该方法存在根本缺陷,因为没有“提交”按钮不是完全有效吗?我不想要“提交”按钮。我只想在文本框更改时提交,并且只有在文本有效时才提交。非常感谢您的反馈!表单不需要“提交”按钮。大多数浏览器在您在输入中按enter键。以此评论表单为例:输入完毕后,我可以单击“添加评论”或者只需点击Enter键,表单就会提交。可以捕捉到事件键被按下的事件,并阻止其提交表单,但不经常使用,因为它会干扰用户的工作流。只有在提交表单时,提交事件才会发生,可以使用“onsubmit”在表单标记中定义提交事件属性,将被激发。非常感谢。这很有帮助,但是表单在哪里得到了仅仅因为输入了Enter键就应该提交的想法?我没有指定它。我只指定了onChange()应该指向someFunc()。如果我没有onChange()属性,那么表单就不会仅仅因为我在文本输入中按了Enter键就考虑提交了。您的意思是,每当您有onChange()属性Coldfusion(或Javascript)时是否会自动添加提交?这与ColdFusion无关,这是HTML的核心功能。onChange仅在光标离开该特定输入且该输入的值已更改时触发。在任何文本输入中按enter键都会在所有主要浏览器中自动触发表单提交。我添加了一个指向HTML规范的链接,具体如下我的回答是,ally与表单提交有关。明白了。这非常有帮助。你知道为什么下面的方法不起作用吗?:$(文档)。准备好(函数(){$(“#text1”)。onchange(函数(事件){event.preventDefault();});
$(document).ready(function(){ 
    $("#form1").submit(function(event){ 
        if ( $('#text1').val() !== "foo" ) {
            alert("Error");
            event.preventDefault(); 
        }
    }); 
});
 var form = document.getElementById("Your Form ID");

 form.addEventListener("submit", function (e) {
      if ("Your Desired Conditions.") {
          e.preventDefault();
      }
 });
<form onsubmit="return false;" >