jquery validate valid()方法一直返回true
使用ajax.beginForm创建的表单,使一个按钮调用form.valid()判断表单是否填写正确,但是这个方法一直返回true的结果,不管表单有没有填写内容,val...
使用ajax.beginForm创建的表单,使一个按钮调用form.valid()判断表单是否填写正确,但是这个方法一直返回true的结果,不管表单有没有填写内容,validate里验证的每个字段都有name属性的值
html:
@using (Ajax.BeginForm("UserLogin", "Login", null, new AjaxOptions() { HttpMethod = "post", OnSuccess = "LoginCallBack" }, new { id = "loginForm" }))
{
<div class="content-wrap" >
<h6 style="margin-top:0px;">欢 迎 登 陆</h6>
<input class="highlight span12 form-control" type="text" id="userName" name="UserName" value="" *placeholder="请输入用户名"* />
<input class="span12" style="margin-top:-8px;" type="password" id="passWord" name="PassWord" value="" placeholder="请输入密码" />
<input class="span12" style="width: auto; float: left;" id="validateCode" name="ValidateCode" type="text" placeholder="请输入验证码" />
<img id="imgValidate" onclick="ChangeValidateCode()" src="/Login/ShowValidateCode?id=1" @*class="logo"*@ style="width:128px;height:40px;cursor:pointer;"/>
<br />
<a href="javascript:void(0);" onclick="ChangeValidateCode()" style="color: HighlightText;">看不清,换一张</a>
<div class="remember">
<input id="remember-me" name="RememberMe" type="checkbox" />
<label for="remember-me">记住我</label>
</div>
<input type="button" class="btn-glow primary login" id="btnSubmit" value="登陆"/>
</div>
}
js 代码:
$().ready(function () {
Bindvalidate();
BindButton();
});
function BindButton() {
$("#btnSubmit").click(function () {
if ($("#loginForm").valid()) {
alert("Yes");
}
else {
alert("No");
};
});
}
function Bindvalidate() {
$("#loginForm").validate({
rules: {
userName: "required",
ValidateCode: "required",
PassWord: {
required: true,
minlength: 5
}
},
messages: {
UserName: "用户名不能为空",
ValidateCode: "验证码不能为空",
PassWord: {
required: "请输入密码",
minlength: "密码不能小于5位"
}
}
});
} 展开
html:
@using (Ajax.BeginForm("UserLogin", "Login", null, new AjaxOptions() { HttpMethod = "post", OnSuccess = "LoginCallBack" }, new { id = "loginForm" }))
{
<div class="content-wrap" >
<h6 style="margin-top:0px;">欢 迎 登 陆</h6>
<input class="highlight span12 form-control" type="text" id="userName" name="UserName" value="" *placeholder="请输入用户名"* />
<input class="span12" style="margin-top:-8px;" type="password" id="passWord" name="PassWord" value="" placeholder="请输入密码" />
<input class="span12" style="width: auto; float: left;" id="validateCode" name="ValidateCode" type="text" placeholder="请输入验证码" />
<img id="imgValidate" onclick="ChangeValidateCode()" src="/Login/ShowValidateCode?id=1" @*class="logo"*@ style="width:128px;height:40px;cursor:pointer;"/>
<br />
<a href="javascript:void(0);" onclick="ChangeValidateCode()" style="color: HighlightText;">看不清,换一张</a>
<div class="remember">
<input id="remember-me" name="RememberMe" type="checkbox" />
<label for="remember-me">记住我</label>
</div>
<input type="button" class="btn-glow primary login" id="btnSubmit" value="登陆"/>
</div>
}
js 代码:
$().ready(function () {
Bindvalidate();
BindButton();
});
function BindButton() {
$("#btnSubmit").click(function () {
if ($("#loginForm").valid()) {
alert("Yes");
}
else {
alert("No");
};
});
}
function Bindvalidate() {
$("#loginForm").validate({
rules: {
userName: "required",
ValidateCode: "required",
PassWord: {
required: true,
minlength: 5
}
},
messages: {
UserName: "用户名不能为空",
ValidateCode: "验证码不能为空",
PassWord: {
required: "请输入密码",
minlength: "密码不能小于5位"
}
}
});
} 展开
2个回答
展开全部
我也遇到了这个问题,我的验证方法是这样写的,这个验证方法没有问题~(写的有点长,答案在最后)
//验证重名
function NameValid() {
return $("#userForm").validate({
rules: {
UserName: {
remote: {
cache: false,
async: false,
url: "/UserManage/CheckUserName",
type: "post",
datatype: "json",
data: {
userName: function () {
return $("#UserName").val();
},
id: function () {
return $("#Id").val();
}
},
//dataFilter: function (data, type) { return data.result; }
}
}
},
messages: {
UserName: {
remote: "这个名字已经有人用过了"
}
}
});
}
然后哩,我调用他: if (NameValid().form()){
alert("重名验证返回为True了!")
}else{
alert("重名验证返回为False了!")
}
结果呢NameValid().form()一直为true,百思不得其解啊,就一直调试,结果发现NameValid()这个东东,他不等我控制器返回数据,就继续执行下去了(这个东东好像默认是true),为什么会这样呢?因为remote是异步执行的啊!异步验证!异步!所以现在要把它变成同步的,让他等待后台返回数据过来,再往下执行,综上所述,解决办法:给remote加上这两个参数(我在这里看到的:http://blog.csdn.net/w1014074794/article/details/39552715)
remote: {
cache: false,
async: false,
url: "/UserManage/CheckUserName",
//验证重名
function NameValid() {
return $("#userForm").validate({
rules: {
UserName: {
remote: {
cache: false,
async: false,
url: "/UserManage/CheckUserName",
type: "post",
datatype: "json",
data: {
userName: function () {
return $("#UserName").val();
},
id: function () {
return $("#Id").val();
}
},
//dataFilter: function (data, type) { return data.result; }
}
}
},
messages: {
UserName: {
remote: "这个名字已经有人用过了"
}
}
});
}
然后哩,我调用他: if (NameValid().form()){
alert("重名验证返回为True了!")
}else{
alert("重名验证返回为False了!")
}
结果呢NameValid().form()一直为true,百思不得其解啊,就一直调试,结果发现NameValid()这个东东,他不等我控制器返回数据,就继续执行下去了(这个东东好像默认是true),为什么会这样呢?因为remote是异步执行的啊!异步验证!异步!所以现在要把它变成同步的,让他等待后台返回数据过来,再往下执行,综上所述,解决办法:给remote加上这两个参数(我在这里看到的:http://blog.csdn.net/w1014074794/article/details/39552715)
remote: {
cache: false,
async: false,
url: "/UserManage/CheckUserName",
展开全部
1.用其他方式替代默认的SUBMIT
复制代码代码如下:
$().ready(function() {
$("#signupForm").validate({
submitHandler:function(form){
alert("submitted");
form.submit();
}
});
});
使用ajax方式
复制代码代码如下:
$(".selector").validate({
submitHandler: function(form)
{
$(form).ajaxSubmit();
}
})
复制代码代码如下:
$().ready(function() {
$("#signupForm").validate({
submitHandler:function(form){
alert("submitted");
form.submit();
}
});
});
使用ajax方式
复制代码代码如下:
$(".selector").validate({
submitHandler: function(form)
{
$(form).ajaxSubmit();
}
})
追问
我代码本身也没有用默认的submit方法,我是问valid()为什么一直返回true
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询