【问题标题】:Validate multiple forms on one page在一个页面上验证多个表单
【发布时间】:2012-02-20 14:57:15
【问题描述】:

jquery 新手并尝试在具有三个表单的页面上实现验证插件。提交第一个表格可以正常工作。在尝试提交仅需要用户名和密码的页面上的第二个表单 (#loginForm) 时,验证错误出现在下面的表单中,以查找电子邮件地址。表格--

<div class="newsTitle">REGISTER HERE</div>
<form id="registerForm" action="register.php" method="post" name="registerForm">
<b>Enter your email address</b><br>
<input type="text" id="emailrf" name="emailrf" size="30"  maxlength="64"><p>
<b>Full Name</b><br>
<input type="text" id="full_namerf" name="full_namerf" size="30" maxlength="64"><p>
Choose Username <span class="cap">( 4-24 characters )</span><br>
<input type="text" id="usernamerf" name="usernamerf" size="24" maxlength="24"><p>
Choose Password <span class="cap">( 6-12 characters )</span><br>
<input type="text" id="passwordrf" name="passwordrf" size="12" maxlength="12"><p>
<input type="hidden" name="formStatusregister" value="register">            
<input type="submit" id="rForm" class="subMit" name="srForm" value="REGISTER">
</form><p><br>

<div class="newsTitle">LOG IN PLEASE</div>
<form id="loginForm" action="register.php" method="post" name="loginForm">
<b class="red">username</b><br>
<input type="text" id="usernameli" name="usernameli" size="30"><p>
<b class="red">password</b><br>
<input type="password" id="passwordli" name="passwordli" size="30"><p>
<input type="checkbox" name="remember" value="yes">  Remember Me 
 <input type="hidden" name="formStatuslogin" value="submitted"><br>             
<input type="submit" id="liForm" class="subMit" name="liForm" value="LOG-IN">
</form>

<p><br>
<div class="newsTitle">RETRIEVE YOUR LOG-IN INFO</div>
<form id="lostForm" action="register.php" name="lostForm" method="post">
Enter your email address and click SUBMIT.<p>
<input type="hidden" name="forgot" value="yes">
<b>email address</b><br>
<input type="text" id="emaill" name="emaill" size="30"><p>
<input type="hidden" name="referrer" value="">
<input type="hidden" name="formStatuslost" value="forgot">
<input type="submit" id="lForm" name="lForm" value="SUBMIT">
</form>

和js代码:

$(document).ready(
function() {    
    $('#lostForm').validate({
        rules: {
            emaill: { 
            required:true,
            email:true
            }       
        }
});

$('#loginForm').validate({
rules: {        
    usernameli:{
        required:true,
        rangelength:[6,24]
        },          
        passwordli:{
        required:true
        }

}//--end rules

}); //--- END loginForm validate() ---//

$('#registerForm').validate({
rules: {
    emailrf: { 
    required:true,
    email:true,
            remote:{
                url:'check_email.php',
                type:'post'
                }
        },
        full_namerf: {
        required:true,
        letters:true
        },
        usernamerf:{
        required:true,
        rangelength:[6,24],
        remote:{
                url:'check_user.php',
                type:'post'
                }           
        },

        passwordrf:{
        required:true,
        rangelength:[6,12]
        }

}, //--end rules
messages:{
emailrf: {
remote:"This email is already registered"
},
usernamerf: {
remote:"Already in use - choose another"
}


} //end messages
}); //--- END registerForm validate() ---//

}); //--END ready---//

它的作用就像第二和第三形式是嵌套的,但它们不是。可能是什么问题?

【问题讨论】:

  • 具有相同 ID 的多个元素会产生不可预知的损坏 DOM。 jQuery 无法对这样的页面做任何事情。养成在进行任何故障排除之前验证 HTML 的习惯。 :)

标签: jquery validation jquery-plugins


【解决方案1】:

您在多个输入上使用相同的 ID 属性。

每个 ID 在页面上都应该是唯一的。尝试在 id 前面加上表单的名称,使其更加独特,例如:

<input type="text" id="registerformusername" name="username" size="24" value=""maxlength="24"><p>

这应该有助于 Jquery 确定哪些元素是哪些

编辑:我已将您修改后的代码放入一个简单的 html 页面中。这似乎工作正常。任何验证错误仅发生在它们所属的表单上,并且仅在单击该表单的提交按钮时出现。代码如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="jquery.validate.js"></script>
</head>
<body>

<p><br>
<div class="newsTitle">REGISTER HERE</div>
<form id="registerForm" action="register.php" method="post" name="registerForm">
<b>Enter your email address</b><br>
<input type="text" id="emailrf" name="emailrf" size="30"  maxlength="64"><p>
<b>Full Name</b><br>
<input type="text" id="full_namerf" name="full_namerf" size="30" maxlength="64"><p>
Choose Username <span class="cap">( 4-24 characters )</span><br>
<input type="text" id="usernamerf" name="usernamerf" size="24" maxlength="24"><p>
Choose Password <span class="cap">( 6-12 characters )</span><br>

<input type="text" id="passwordrf" name="passwordrf" size="12" maxlength="12"><p>
<input type="hidden" name="formStatusregister" value="register">            
<input type="submit" id="rForm" class="subMit" name="srForm" value="REGISTER">
</form><p><br>

<div class="newsTitle">LOG IN PLEASE</div>
<form id="loginForm" action="register.php" method="post" name="loginForm">
<b class="red">username</b><br>
<input type="text" id="usernameli" name="usernameli" size="30"><p>
<b class="red">password</b><br>
<input type="password" id="passwordli" name="passwordli" size="30"><p>
<input type="checkbox" name="remember" value="yes">  Remember Me 
<input type="hidden" name="formStatuslogin" value="submitted"><br>             

<input type="submit" id="liForm" class="subMit" name="liForm" value="LOG-IN">
</form>

<p><br>
<div class="newsTitle">RETRIEVE YOUR LOG-IN INFO</div>
<form id="lostForm" action="register.php" name="lostForm" method="post">
Enter your email address and click SUBMIT.<p>
<input type="hidden" name="forgot" value="yes">
<b>email address</b><br>
<input type="text" id="emaill" name="emaill" size="30"><p>
<input type="hidden" name="referrer" value="">
<input type="hidden" name="formStatuslost" value="forgot">
<input type="submit" id="lForm" name="lForm" value="SUBMIT">
</form>

<script>


$(document).ready(
function() {    
$('#lostForm').validate({
rules: {
    emaill: { 
    required:true,
    email:true
    }       
}
});

$('#loginForm').validate({
rules: {        
usernameli:{
required:true,
rangelength:[6,24]
},          
passwordli:{
required:true
}

}//--end rules

}); //--- END loginForm validate() ---//

$('#registerForm').validate({
rules: {
emailrf: { 
required:true,
email:true,
    remote:{
        url:'check_email.php',
        type:'post'
        }
},
full_namerf: {
required:true,
letters:true
},
usernamerf:{
required:true,
rangelength:[6,24],
remote:{
        url:'check_user.php',
        type:'post'
        }           
},

    passwordrf:{
    required:true,
    rangelength:[6,12]
    }

}, //--end rules
messages:{
emailrf: {
remote:"This email is already registered"
},
usernamerf: {
remote:"Already in use - choose another"
}


} //end messages
}); //--- END registerForm validate() ---//

}); //--END ready---//
</script>
</body></html>

【讨论】:

  • 我最初给了他们唯一的 ID,但没有任何效果。根据这里的建议,我已经一次又一次地回到那个位置,它不起作用。表单提交时没有任何输入和/或错误输入。
  • 我认为问题在于缺少字段集标签
  • 不,验证插件不需要字段集选项卡。我刚刚尝试了您发布的代码,它在 Chrome 和 Firefox 中运行良好(如果您不填写字段,则会出现验证错误)!您是否尝试过访问 javascript 控制台并查看是否报告了任何错误?
  • 上面的代码不能按原样工作。使用第一个表单,在前三个字段中输入信息并单击提交 - 验证错误消息出现在所有三个表单上。我正在 Firefox/PC 上进行测试。当我将字段集添加到所有表单时,我才让它工作,这也允许页面验证。然后,错误消息只会出现在您实际尝试提交的表单上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 2021-04-03
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
相关资源
最近更新 更多