jquery.validate.js两层验证 , 求优化。

第一层验证人民币价格输入的格式,第二层把输入的人民币价格传入后台,根据汇率计算出美元价格,显示在页面美元价格文本框,代码如下:$(document).ready(func... 第一层验证人民币价格输入的格式,第二层把输入的人民币价格传入后台,根据汇率计算出美元价格,显示在页面美元价格文本框,代码如下:
$(document).ready(function() {
$("#myform").validate({
onkeyup: false,
rules: {
price:{
required: true,
number: true,
isprice:true,
minvalue:0
}
}
});
$("#price").change(function(){
$.ajax({
type: "POST",
url: "checkUsaprice.do",
data: "price="+$("#price").val()+"&nwOfficeId="+$("#nwOfficeId").val(),
datatype:"json",
success: function(data) {
$("#usaPrice").val(data);
},
error:function(){
//alert("something wrong!");
}
});
});
});
上面的代码都是没有问题的,实现是实现了,但是有个小问题,就是不论上面输入的人民币价格是否符合输入要求,都会进ajax计算美元价格,我觉得没必要,我希望实现的效果是先对输入的格式进行验证,如果符合要求,才会进ajax计算。

求高手优化代码,说白了就是jquery.validate.js中是否有方法可以调用这第一层的validate返回一个true或者false,我再把第二层放进这个if中,就可以实现这效果了。
展开
 我来答
shenchaoliang
2011-10-18 · TA获得超过1163个赞
知道大有可为答主
回答量:810
采纳率:0%
帮助的人:1519万
展开全部
jquery.validate版本是多少的?isprice:true,minvalue:0 这个在我的版本没有,自己定义加进去的?这样的我觉得应该加个method,如下。另我的版本有
price:true,
和min:0所以改成这个了,还有就是input的id是price了,和validate定义的price规则冲突,所以id为price的加上双引,改动一下
$.validator.addMethod("getusa", function (value, element, param) {
$.ajax({
type: "POST",
url: "checkUsaprice.do",
data: "price="+ value +"&nwOfficeId="+ $("#nwOfficeId").val(),
datatype:"json",
success: function(data) {
$("#usaPrice").val(data);
},
error:function(){
//alert("something wrong!");
}
});
return true;
});

$("#myform").validate({
onkeyup: false,
rules: {
"price":{
required: true,
number: true,
price:true,
min:0,
getusa:true
}
}
});

修改method,price的值改变了才提交到服务器端
$.validator.addMethod("getusa", function (value, element, param) {
var previous = $.data(element, "previousValue") || $.data(element, "previousValue", { old: null });
if (previous.old !== value){
$.ajax({
type: "POST",
url: "",
data: "price="+ value +"&nwOfficeId="+ $("#nwOfficeId").val(),
datatype:"json",
success: function(data) {
$("#usaPrice").val(data);
$.data(element, "previousValue", { old: value })
},
error:function(){
//alert("something wrong!");
}
});
}
return true;
});
追问
高手一出手,就知道有没有,其实本想发邮件问你的,怕打扰,不是很急就发到百度知道了,哈哈。 你上面说的,解了我几个误区,但还是没有实现我想要的效果,比如说,用户在人民币价格文本框输入-1,这个JS能实现的就是一边报输入格式不合法,一边把-1丢入ajax算出来一个负数放入美元价格文本框,虽然提交不了,还是感觉不舒服,我想实现的是
if(输入合法){
ajax计算美元价格
}
其实我也不知道这个能不能实现,只是希望实现。
追答
具体代码是什么,你的isprice是自己加上去的吧?如果是把它的正则改下改成/^(?:\d+|\d{1,3})(?:\.\d{1,2})?$/ 如果没有的话,在jquery.validate的methods里面价格price的验证也行,如下
price: function (value, element) {
return this.optional(element) || /^(?:\d+|\d{1,3})(?:\.\d{1,2})?$/.test(value);
}
或者
$(document).ready(function(){
$.validator.addMethod("getusa", function (value, element, param) {
var previous = $.data(element, "previousValue") || $.data(element, "previousValue", { old: null });
if (previous.old !== value){
var reg = /^(?:\d+|\d{1,3})(?:\.\d{1,2})?$/;
if(reg.test(value)){
$.ajax({
type: "POST",
url: "jquery_json.asp",
data: "price="+ value +"&nwOfficeId="+ $("#nwOfficeId").val(),
datatype:"json",
success: function(data) {
$("#usaPrice").val(data);
$.data(element, "previousValue", { old: value })
},
error:function(){
//alert("something wrong!");
}
});
}
else{
return false;
}
}
return true;
},"请输入正确格式的价格");

$("#myform").validate({
onkeyup: false,
rules: {
"price":{
required: true,
number: true,
min:0,
getusa:true
}
}
});
});
这样就不会有-1的情况,再者min:0也不会你所说的-1提交到服务端的。
required: true,
number: true,
min:0,
getusa:true
这个顺序要正确,规则是符合了才往下走的,不符合就不会往下一个规则走的
帐号已注销
2011-10-17 · 超过14用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:39.9万
展开全部
你直接在change方法前面做验证不久万事大吉啦
更多追问追答
追问
是啊,我是这么想的,但是要怎么实现呢?~
追答
$("#price").change(function(){

if(!(new RegExp(填写你要第一层验证的正则表达式).test($(this).val()))){
return; //验证不通过
}
$.ajax({
type: "POST",
url: "checkUsaprice.do",
data: "price="+$("#price").val()+"&nwOfficeId="+$("#nwOfficeId").val(),
datatype:"json",
success: function(data) {
$("#usaPrice").val(data);
},
error:function(){
//alert("something wrong!");
}
});
});
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式