【问题标题】:Form not submitting after AJAX call returns trueAJAX 调用返回 true 后表单未提交
【发布时间】: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 不知道这就是为什么我说...对不起

标签: ajax jquery


【解决方案1】:

有什么用,

event.preventDefault();
return false;

在最后一行。我认为这可能是问题所在。

【讨论】:

  • 如果该行被删除,那么表单将在不通过 AJAX 调用的情况下提交。所以它也会提交错误。
  • @vinsanity38 您可以在开始时阻止默认操作。
  • 我只希望在功能失败时阻止默认操作
【解决方案2】:

不要使用 event.preventDefault();在您的 validatePhoneNumber() 函数的最后一个

它会阻止所有默认回发

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多