我有一点逻辑错误需要帮助。代码工作得很好,我只是不确定在哪里设置我的标志来阻止无限循环。
有一个登录页面,我首先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();
},
});
}
});
}
});
}
感谢您的帮助
答案 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
。