这种方法有一个根本的缺陷。您当前正在告诉表单,当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();
}
});
});