我的onsubmit
无效。我的想法是放置一些必填字段,为了达到这个目的,我在HTML中使用onsubmit
方法调用JavaScript函数。
这个想法是,如果填写了所有必填字段,javascript函数将返回true
,它将转到页面/control/Cadastro.php
。否则,如果任何必填字段为空,则会返回false
并且它不会移至页面/control/Cadastro.php
,保留在当前页面中,直到为真。
不幸的是,如果所有必填字段都未按预期填充,则该函数会返回false
,但它仍会移至页面/control/Cadastro.php
,即使它不应该。
我要切断一些代码,以使我的观点可以察觉。
<!DOCTYPE html>
<html>
<head>
<script>
function ValidateRequiredFields()
{
var message = new String('\nCampos obrigatórios:\n');
var flag=new Boolean(1);
var x=document.forms["theForm"]["nr_processoCA"].value;
if (x==null || x==""){
message += '\nNº do processo\n';
flag = new Boolean(0);
}
if (flag == false){
alert(message);
}
return flag;
}
</script>
</head>
<body>
<form name="theForm" onsubmit="return ValidateRequiredFields()" method="post" action="../control/Cadastro.php">
Nº do Processo: <br>
<input type="text" name="nr_processoCA" class="input-xlarge">
<br>
<div class="row-fluid" style="text-align:center;">
<input type="submit" class="btn btn-primary btn-large" value="Gravar">
</div>
</form>
</body>
</html>
答案 0 :(得分:12)
您应该在onsubmit函数中使用preventDefault
。我修改了你的代码:
function ValidateRequiredFields()
{
var message = new String('\nCampos obrigatórios:\n');
var flag=new Boolean(1);
var x=document.forms["theForm"]["nr_processoCA"].value;
if (x==null || x==""){
message += '\nNº do processo\n';
flag = new Boolean(0);
}
if (flag == false){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; // for IE as dont support preventDefault;
}
alert(message);
}
return flag;
}
答案 1 :(得分:3)
为了使这项工作,你的ValidateRequiredFields
函数需要返回一个布尔值。然后你应该将该方法附加到onSubmit
事件。请注意,对于onsubmit
,您需要使用return
关键字。
此代码示例有效:
<!DOCTYPE html>
<html>
<head>
<script>
function ValidateRequiredFields() {
var message = new String('\nCampos obrigatórios:\n');
var flag=1;
var x=document.forms["theForm"]["nr_processoCA"].value;
if (x==null || x==""){
message += '\nNº do processo\n';
alert(message);
return false;
}
return true;
}
</script>
</head>
<body>
<form name="theForm" method="post" action="../control/Cadastro.php" onSubmit="return ValidateRequiredFields()">
Nº do Processo: <br><input type="text" name="nr_processoCA" class="input-xlarge"><br>
<div class="row-fluid" style="text-align:center;">
<input type="submit" class="btn btn-primary btn-large" value="Gravar">
</div>
</form>
</body>
</html>
答案 2 :(得分:2)
如果为true,我建议放一个运行表单的按钮:
<input type='button' onclick="if (ValidateRequiredFields()) document.forms['theForm'].submit();" />
这就是全部......
答案 3 :(得分:1)
对象将始终求值为true,即使它是值为false的布尔对象。
将flag = true
放在函数顶部,然后flag = false
而不是创建布尔值。
答案 4 :(得分:0)
我遇到了类似的问题。事实证明我的验证中存在错误(嵌套了一些深层函数),这导致JavaScript在到达return语句之前退出函数的执行。此时它将继续提交。
我建议任何人找到这个页面寻找“onsubmit方法不会停止提交”的答案,就是用精细的牙齿梳理你的验证功能。
答案 5 :(得分:0)
在寻找适合我的答案后,我决定创建一个解决方案。以下代码允许在提交或运行其他功能(在Chrome中测试)之前运行本机HTML5表单验证。确保在函数后返回false以阻止表单提交。
<input type="submit" value="Submit" onclick='if (document.getElementById("mainForm").checkValidity()) { submitData(); return false;}' />
&#13;