我有以下代码
function loopCalendar() { // loop all calendar divs
var labels = loopDivs('calendarDiv', 'btn_'), // loop calendar buttons
arrows = loopDivs('calendarDiv', 'icon_'), // loop calendar arrows
content = loopDivs('calendarDiv', 'content_'); // loop calendar content
for (var i = 0; i < labels.length; i++) {
var l = labels[i],
a = arrows[i],
c = content[i];
(function(l, a, c) {
// add event on click
On(document.getElementById(l), ['click', 'touch'], function(e){
// show content of the clicked div
showContent(c, a);
// loop calendar availabilities
loopAvailabilities(c);
});
})(l, a, c);
}
}
loopDivs()循环到具有给定id的给定div并带回所有ID。
基本上这个脚本循环遍历日历并获取每个月的id,每个箭头的id代表相应月份的打开/关闭图标,以及包含预订可用性的月份内容的id。完成循环后,它会显示该月的内容,并在该月的几天内开始循环(loopAvailabilities())。在loopAvailabilities()中有另一个类似的脚本,这次每天都会添加一个AJAX GET REQUEST,它将带来点击的日期可用性。
一切正常但如果我关闭月份并再次打开它,应用于一天的AJAX REQUEST开始进行2次GET调用,如果我重复关闭月份的过程并重新打开它,则需要AJAX REQUEST我打开相应的月份,开始发出尽可能多的请求。
如何防止重复调用ajax请求?
如果您需要脚本的其余部分,我会添加它,但它有点长,它基本相同,加上AJAX调用
答案 0 :(得分:0)
在附加之前删除单击并触摸事件。每次调用loopCalendar方法时都会附加一个附加的事件处理程序。
开启(document.getElementById(l),[&#39;点击&#39;,&#39;触摸&#39;],功能(e){})这就是行问题所在。你需要通过删除附加的前一个处理程序来反转这种效果,或者你需要确保每个元素只调用一次。