我希望在加载某些数据后触发窗口调整大小的自定义作业:
function doJob() {
...
}
DataLoaded() {
$(window).on("resize", function() { doJob(); });
}
但是DataLoaded
可以多次出现,我怎样才能确保doJob()只绑定一次?
请注意,绑定一次,但可以执行多次,所以$(“...”)。one(“...”)不是我的目标
IMO:
- 设置全局变量
isBind
以检查方法是否为bind,这看起来是多余的- $(window).off(“resize”)。on(“resize”,....),我不确定是否先调用off()是安全的方式
醇>
答案 0 :(得分:2)
您可以像这样设置一个标志变量:
var didJob = false;
DataLoaded() {
$(window).on("resize", function() {
if(!didJob){
doJob();
didJob = true;
}
});
}
但是我不确定你是如何多次调用DataLoaded函数的,因为在这个函数中你也在检查窗口大小调整。所以,它不应该被多次调用。可能你想这样:
$(window).off("resize.DataLoaded").on("resize.DataLoaded", function() {
doJob();
});
在上面的示例中,您会看到resize.DataLoaded
,DataLoaded
是event namespace。首先,您将解析resize事件与DataLoaded命名空间,然后将resize事件与DataLoaded命名空间绑定,以便它不会影响任何其他resize事件。
答案 1 :(得分:1)
每次绑定时都可以取消绑定此类事件
$(window).unbind("resize");
$(window).bind("resize", function() { doJob(); });
答案 2 :(得分:0)
我认为,你应该这样做,声明一个变量并在doJob()
函数之后递增它,然后检查它。
function doJob() {
...
}
var once = 0;
DataLoaded() {
$(window).on("resize", function() {
if(once == 0){
doJob();
once++;
}
});
}
希望这有帮助。