javascript - 返回 false 不阻止表单提交

标签 javascript jquery

我正在尝试使用 $.get 请求验证一个字段。我可以看到错误消息(“计划已存在”)但正在提交表单。我想阻止提交表单。这是我的代码:

$("#add_plan_subscriptions").submit(function(event) {
    var flag = true;
    var subdomain_val = $('[name="plan[subdomain_type_id]"]').val();
    var plan_val = $('[name="plan[plan_type_id]"]').val();
    var plan_name = $('[name="plan[plan_name]"]').val();
    var subdomain_type_id = subdomain_val;
    var plan_name = $('[name="plan[plan_name]"]').val();
    $.get("/plans/check_duplicate_plan",{subdomain_type_id: subdomain_type_id, plan_name: plan_name}, function (response) {
      if (response){
        event.preventDefault() ;
        var element = $('[name="plan[plan_name]"]');
        var message = "Plan already present";
        addError(element,message)
        return false;
      }
      else{
        var element = $('[name="plan[plan_name]"]');
        removeError(element)
      }
    })
    if(subdomain_val == ""){
      var element = $('[name="plan[subdomain_type_id]"]')
      var message = "Please select user type"
      addError(element,message)
      flag = false;
    } 
    if(subdomain_val != ""){
      var element = $('[name="plan[subdomain_type_id]"]')
      removeError(element)
    }
    if(plan_val == ""){
      var element = $('[name="plan[plan_type_id]"]')
      var message = "Please select plan type"
      addError(element,message)
      flag = false;
    } 
    if(plan_val != ""){
      var element = $('[name="plan[plan_type_id]"]')
      removeError(element)
    }
    if (!flag){
      event.preventDefault();
      return false;
    }
    return true;
});

最佳答案

现在 $.getGET 响应之前以 async 模式调用您的表单提交函数正在调用。 所以在 sync 模式下使用 ajax 而不是 $.get

            $.ajax({
                url: '/plans/check_duplicate_plan',
                data: { subdomain_type_id: subdomain_type_id, plan_name: plan_name},
                dataType: 'json',
                async:false,
                type: 'GET',
                success: function (response) {
                    if (response){
                       event.preventDefault() ;
                       var element = $('[name="plan[plan_name]"]');
                       var message = "Plan already present";
                       addError(element,message)
                       return false;
                    }
                    else{
                        var element = $('[name="plan[plan_name]"]');
                        removeError(element)
                    }
                }
            })

关于javascript - 返回 false 不阻止表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31158911/

相关文章:

javascript - 下一个 JS - ReferenceError : document is not defined

javascript - 在 NodeJS Express 中返回带有嵌套数组的 JSON 数据和标题

javascript - 不限制 id 属性来构建带有 anchor 的 URL

javascript - 如何使用 jQuery getJSON() 访问从外部源接收的 JSON 元素?

jQuery $(document).ready() 在 window.location.href 之后未触发

javascript - 下面的 JavaScript 语法是如何工作的?数组['push']('5')

javascript - 为什么不调用该函数?

jquery - 如何更改元素内的文本值?

javascript - jQuery 切换文本更改和隐藏元素

javascript - 当另一个 ul 被点击事件切换时关闭所有打开的 ul