【发布时间】:2017-01-28 17:22:13
【问题描述】:
我有一个容器元素被多次加载,以通过 Ajax 请求在单击事件上显示可变内容,并且在 ajax Complete 时,我调用了一些函数,包括 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();
}
});
};
请假设所有变量都已定义。
【问题讨论】:
-
您的示例非常模糊,其中的变量没有任何意义(
A、x),而且您根本没有向我们展示x变量在哪里被修改。请给我们一个更完整的例子。 -
我认为您的代码中还有其他未与我们共享的内容。这段代码在我的机器上运行良好,函数
A()在我的机器上触发了一次...... -
我敢打赌,您不止一次调用按钮单击侦听器。尝试将
$(".button").on("click"...更改为$(".button").off('click').on("click"...以进行验证。显示的内容不足以让我们进行故障排除 -
由于我无法在我的机器上重现我的缩小版本的问题,那么问题出在您的代码上,这不是一般问题。您在问题中的这段代码不会重现您提到的问题。除非您的代码中有其他我们在您的问题中没有的内容
-
没有显示会导致提到的症状。问题在别处。可能多次加载同一个脚本?
标签: javascript jquery