【发布时间】:2013-02-22 18:37:19
【问题描述】:
我正在使用 Google 电话验证库来检查号码是否对 AJAX 调用有效。如果号码无效,我需要以下函数来阻止表单提交。
目前它会阻止表单正确提交,但是当它返回true时表单不会提交。确实发生了真实声明的警报,但表单仍然没有提交。我错过了什么?
$(document).ready(function(){
$('form#sellerForm').submit(validatePhoneNumber);
});
function validatePhoneNumber() {
var output = null;
var phoneNumber = $('#phone').val();
var node = document.getElementById('phoneOutput');
var country = $('#country').val();
if(country == -1){
output = translateNoCountry();
node.innerHTML = output;
event.preventDefault();
return false;
}
if(output == null){
//AJAX to get country code from country for var regionCode;
$.ajax({ type: "POST",
url: '/ajax/validate_phone.php',
data: {country: country},
cache: false,
success: function(result) {
var regionCode = jQuery.parseJSON(result);
try {
var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
var number = phoneUtil.parseAndKeepRawInput(phoneNumber, regionCode);
var isNumberValid = phoneUtil.isValidNumber(number);
if(!isNumberValid){//invalid number
output = translateInvalidePhone();
}
} catch (e) {
output = translateInvalidePhone();
}
if(output != null){
node.innerHTML = output;
event.preventDefault();
return false;
}else{
alert('Hello world');
return true;
}
}
});
event.preventDefault();
return false;
}
}
【问题讨论】:
-
你已经返回 false;在最后。 ..尝试在文档准备好的一侧定义函数
-
顺便说一句,你可以说
$('form#sellerForm').submit(validatePhoneNumber);- 如果匿名包装函数唯一要做的就是调用你的命名函数,你就不需要它。关于您的实际问题,提示:Ajax 是 asynchronous. -
@nnnnnn 可能是 OP 想要在函数 args 中发送事件,所以 OP 使用了该方法..
-
@DipeshParmar - jQuery 已经这样做了 - 注意匿名函数也有
events作为它唯一显式声明的参数。 -
@nnnnnn 我知道可能是 OP 不知道这就是为什么我说...对不起