我有一个容器元素被多次加载以通过Ajax请求在click事件上显示变量内容,并且在ajax完成后我调用了一些函数,包括if语句中的函数(A)。
我的问题是,当函数(A)最终被调用时,它会被多次调用,具体取决于在if语句为真之前容器的加载次数。
以下是我的代码的简单版本:
$(".button").on("click", function(){
loadContainer();
});
var loadContainer = function(){
$(".container").load(url, function(){
var x = $(".x");
if(x.length>0){
A();
};
});
};
x
是一个元素$(".x")
,它将被加载到容器中,而函数(A)只应在加载该元素时被调用。即$(".x").length>0
如果(x.length> 0)在加载容器3次后为真,则函数(A)将被调用3次。
有没有办法绕过这个或者确保函数(A)只被调用一次?
编辑: 我的完整代码:
ajaxBtn.on("click", function(e) {
loadContainer(url, curtain, mainContainer, body, links);
});
var loadContainer = function(url, curtain, maincontainer, body, links) {
$(".main-container").load(url + " .main-container > *", function() {
$("#logo").css({
"z-index": "400"
});
mainFun();
curtain.removeClass("full");
links.removeClass("here");
body.removeClass("no-scroll");
clearInterval(timer);
getFlexIndex();
position = 0;
if (vidContainer.length > 0) {
youTubeLazyLoad();
}
});
};
请假设所有变量都已定义。
答案 0 :(得分:1)
听起来你多次添加相同的按钮点击监听器
你应该调查一下这是怎么发生的,因为我们没有足够的东西知道为什么。它是否嵌入在另一个事件处理程序中?或者在一个被多次调用的函数中?
解决方法是在添加新的
之前删除点击侦听器更改
$(".button").on("click"...
到
$(".button").off('click').on("click"...