Javascript JQuery验证规则不起作用
已修复-请参见下文:) 我正在使用jQuery验证插件,由于某些原因,我无法让它返回有效字段-始终返回无效字段 这是我的Javascript JQuery验证规则不起作用,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,已修复-请参见下文:) 我正在使用jQuery验证插件,由于某些原因,我无法让它返回有效字段-始终返回无效字段 这是我的 $(function(){ $("#address").validate({ valid: function(val){ $.getJSON("http://maps.google.com/maps/geo?q="+ escape(val) +"&key=
$(function(){
$("#address").validate({
valid: function(val){
$.getJSON("http://maps.google.com/maps/geo?q="+ escape(val) +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?",
function(data, textStatus)
{
if(data.Status.code=='200')
{
return true;
}else{
return false;
}
});
},
errorMessage: function(val){
return "must geo code";
},
appendCompletionIcon: true
});
});
我可以看到任何特定地址的地理代码请求返回为“已找到”或“未找到”,但验证仍然失败-如果我按照以下方式修改函数,我确实会收到与有效或无效地址相关的“是”或“否”警报,但验证仍然失败
function(data, textStatus)
{
if(data.Status.code=='200')
{
alert('yes');
return true;
}else{
alert('no');
return false;
}
});
任何帮助都将不胜感激
我找到了一种方法来破解这个问题,它不是非常漂亮,因为它需要两个地理代码调用才能完成。不过对我来说已经足够好了
var geocode = false;
function geoadd()
{
$.getJSON("http://maps.google.com/maps/geo?q="+ $("#address").val() +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?",
function(data, textStatus)
{
if(data.Status.code=='200')
{
geocode = true;
}else{
geocode = false;
}
});
}
$(function(){
$("#address").validate({
valid: function(val){
geoadd();
return geocode;
},
errorMessage: function(val){
return "must not be blank";
},
appendCompletionIcon: true
});
});
无论ajax调用状态如何,验证都会失败,因为从
valid
处理程序返回的值为null,而不是true或false
true或false值由ajax的完整处理程序返回,这与从valid
函数返回true/false值不同
要解决此问题,您必须进行同步ajax调用(我不建议这样做,因为它会在等待响应时锁定用户界面),或者将验证插件更改为其他支持使用ajax调用进行验证的插件。谢谢,您认为我可以破解它吗,因为我有50多个字段。根据地理代码结果,可以使用函数设置值为1或0的隐藏表单字段,并根据该值进行验证?或者我还是在浪费时间。谢谢你,那会有用的。触发ajax调用以进行地理代码检查,然后在ajax响应处理程序中执行所需操作(根据响应将#地址字段标记为有效或无效)。