Javascript Can';事件发生后不提交表单
我有一个表单要使用PHP和javascript进行验证。 PHP端工作得很好。Javascript验证正确,但单击“提交”按钮时,表单将不会提交 我在表单元素中设置了onsubmit=“return validate(event);” 在validate(event)内部,第一行有event.preventDefault()。我已检查表单是否正确验证,表单是否被阻止提交 在验证(事件)结束时,如果没有错误,我将提交表单 我试过了Javascript Can';事件发生后不提交表单,javascript,Javascript,我有一个表单要使用PHP和javascript进行验证。 PHP端工作得很好。Javascript验证正确,但单击“提交”按钮时,表单将不会提交 我在表单元素中设置了onsubmit=“return validate(event);” 在validate(event)内部,第一行有event.preventDefault()。我已检查表单是否正确验证,表单是否被阻止提交 在验证(事件)结束时,如果没有错误,我将提交表单 我试过了 document.getElementById("checkout
document.getElementById("checkout").submit();
$('form').submit();
$('#checkout').unbind('submit').submit();
$('form')[0].submit();
$('#checkout').off('submit');
下面是相关代码位的摘要
<form method="post" action="thanks-order.php" id="checkout" name="checkout" onsubmit="return validate(event);">
...
<input type="hidden" name="flag">
<p><input type="submit" name="pay" value="Pay"></p>
...
</form>
<script>
function validate(event)
{
//prevent form submission
event.preventDefault();
//reset error flag
document.getElementsByName("flag")[0].value = "";
//
//form validation code
//
...
//if error flag is not set to "error"
if(getFlag()=="")
{
//submit form
//all of these doesn't work
// document.getElementById("checkout").submit();
// $('checkout').submit();
// $('#checkout').unbind('submit').submit();
// $('form')[0].submit();
// $('#checkout').off('submit'); // then submit
}
}
...
</script>
...
...
函数验证(事件)
{
//防止表格提交
event.preventDefault();
//重置错误标志
document.getElementsByName(“标志”)[0]。value=“”;
//
//表单验证代码
//
...
//如果错误标志未设置为“错误”
如果(getFlag()==“”)
{
//提交表格
//所有这些都不起作用
//document.getElementById(“签出”).submit();
//$('checkout').submit();
//$(“#签出”).unbind('submit').submit();
//$('form')[0]。提交();
//$('#checkout')。关闭('submit');//然后提交
}
}
...
单击“提交”按钮并出现错误时,将正确显示错误消息。但是,当没有错误时,表单提交不会影响将记录插入数据库(通过感谢order.php)。当您在validate中无条件运行preventDefault时,无论提交是如何触发的,它都会阻止表单提交 只需连续运行preventDefault,如下所示:
function validate(event) {
//reset error flag
document.getElementsByName("flag")[0].value = "";
//
//form validation code
//
...
//if error flag is not set to "error"
if(getFlag()=="") {
//submit form
//all of these doesn't work
// document.getElementById("checkout").submit();
// $('checkout').submit();
// $('#checkout').unbind('submit').submit();
// $('form')[0].submit();
// $('#checkout').off('submit'); // then submit
} else {
//prevent form submission
event.preventDefault();
}
}
当您在validate中无条件运行preventDefault时,无论提交是如何触发的,它都会阻止表单提交 只需连续运行preventDefault,如下所示:
function validate(event) {
//reset error flag
document.getElementsByName("flag")[0].value = "";
//
//form validation code
//
...
//if error flag is not set to "error"
if(getFlag()=="") {
//submit form
//all of these doesn't work
// document.getElementById("checkout").submit();
// $('checkout').submit();
// $('#checkout').unbind('submit').submit();
// $('form')[0].submit();
// $('#checkout').off('submit'); // then submit
} else {
//prevent form submission
event.preventDefault();
}
}
这是因为在提交时总是
preventDefault
,所以调用submit不会在if(getFlag()=“=”)
之后的else块中提交preventDefault,因为在提交时总是preventDefault
,所以调用submit不会在if(getFlag()=“=”)之后的else块中提交preventDefault