我有一些JavaScript代码,调用Ajax:
function foo(e, e1, curc) {
var sender = (e && e.target) || (window.event && window.event.srcElement);
var modal3 = document.getElementById('mymodal3');
modal3.style.display = "block";
var spin = 0;
console.log("Code_I: ", e); ///<---- First log
$('#mform9').submit(function (e2) {
e2.preventDefault();
e2.stopImmediatePropagation();
spin = $('#spinner2').spinner("value");
$('#spinner2').spinner("value", 0);
console.log("Code: ", e);///<---- Second log
document.getElementById("mform9").reset();
$.ajax({
type: 'POST',
url: 'script.php',
dataType: 'json',
data: "id=" + e4 + "&mod=" + spin + "&curc=" + curc,
success: function (data)
{
modal3.style.display = "none";
document.getElementById("itog").innerHTML = data.d + data.a;
},
error: function (xhr)
{
modal3.style.display = "none";
}
});
return false;
});
}
});
}
我用HTML调用我的函数:
onclick="javascript:foo(7700000010032,1,140)"
在第一次通话中,一切正常。但是在第二次调用中,具有不同的第一个值,我在这里有了新的价值:
console.log("Code_I: ", e); ///<---- First log
但是这里我有以前函数调用的值:
console.log("Code: ", e);///<---- Second log
所以,用不同的参数调用两次函数我得到了 第一个电话:Code_I:4820109927406代码:4820109927406。 第二个电话:Code_I:7622300813437代码:4820109927406 我无法理解什么是错的,为什么我的功能中有旧值。
答案 0 :(得分:2)
这可能是因为每次调用foo
函数时,都会在表单中附加一个新的.submit
处理程序,每次都会创建一个新的作用域。这就是你在第二次通话后得到第一个电话的价值的原因。
解决方案:仅在$('#mform9').submit
函数之外附加foo
处理程序一次,如下所示:
let main // Initialize a variable outside of foo and submit, so you can access it from both
function foo(e, e1, curc) {
// ...
main = e
console.log("Code_I: ", main )
// ...
}
$('#mform9').submit(function (e2) {
// ...
console.log("Code: ", main )
// ...
})