jQuery设置标志以停止提交循环

时间:2017-03-26 19:32:34

标签: javascript jquery forms

我有一点逻辑错误需要帮助。代码工作得很好,我只是不确定在哪里设置我的标志来阻止无限循环。

有一个登录页面,我首先preventDefault然后从表单中提取数据,处理数据,替换一些数据,然后使用新数据submit表单。问题是,当我提交表单时,我的函数重新开始并进入无限循环。我知道我需要设置一面旗帜,我只是不确定在哪里。这是我当前的代码,带有无限循环。

var flag = false;
$(function() {
if(flag != true){
  $("form[action='account/login']").submit(function(event){
    event.preventDefault();
    custEmail = $("form[action='account/login'] input[type=email]").val();
      if(products.length != 0){
          $.ajax({
              url: "/apps/proxy/customer",
              data: {custEmail, products},
              type: "GET",
              dataType: "json",
              complete: function(data) {
                $("form[action='account/login'], input[name='checkout_url']").attr("value", data.responseText);
                form = $("form[action='account/login']");
                var flag = true;
                form.submit();
              },
          });           
      }
  });
 }
});
}

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您不需要标记,您需要触发原生提交处理程序,而不是jQuery的提交处理程序,这只会让您陷入无限循环并且永远不会提交形式。

$(function() {
    $("form[action='account/login']").on('submit', function(event) {
        event.preventDefault();

        var form      = this;
        var custEmail = $("input[type=email]", form).val();

        if (products.length != 0) {
            $.ajax({
                url: "/apps/proxy/customer",
                data: {
                    custEmail,
                    products
                },
                type: "GET",
                dataType: "json"
            }).done(function(data) {
                $("input[name='checkout_url']", form).val(data.responseText);
                form.submit();
            });
        }
    });
});

答案 1 :(得分:0)

使用

var flag = true

您重新声明变量标记(因为' var'关键字),因此不会更改原始标记。您需要将该行更改为

flag = true