Javascript阻止重新循环通过div

时间:2015-02-02 07:38:59

标签: javascript ajax loops

我有以下代码

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调用

1 个答案:

答案 0 :(得分:0)

在附加之前删除单击并触摸事件。每次调用loopCalendar方法时都会附加一个附加的事件处理程序。

开启(document.getElementById(l),[&#39;点击&#39;,&#39;触摸&#39;],功能(e){})这就是行问题所在。你需要通过删除附加的前一个处理程序来反转这种效果,或者你需要确保每个元素只调用一次。