如何阻止Javascript重复该函数?

如何阻止Javascript重复该函数?,javascript,jquery,Javascript,Jquery,伙计们,我有一个javascript,它有一个each循环,在这个循环中,我为每个索引值调用一个特定的函数。此脚本在到达页面末尾时执行鼠标滚动事件(延迟加载) 这是脚本的主要部分: function (data) { $.each(data, function (index, value) { BindNotice(value); }); } 现在的问题是,在索引达到其最大值后,它将从0索引重新启动。因此,在我看来,我得到了重复的数据。我想限制此脚本仅在索引达到最大值之前

伙计们,我有一个javascript,它有一个each循环,在这个循环中,我为每个索引值调用一个特定的函数。此脚本在到达页面末尾时执行鼠标滚动事件(延迟加载)

这是脚本的主要部分:

function (data) {
 $.each(data, function (index, value) {
   BindNotice(value);
     });
  }
现在的问题是,在索引达到其最大值后,它将从0索引重新启动。因此,在我看来,我得到了重复的数据。我想限制此脚本仅在索引达到最大值之前执行。我该怎么做呢

编辑:添加了完整的功能

function callMoreData()
    {
        $.ajax(
                    {
                        type: "GET",
                        url: "/api/values/getnotice",
                        dataType: "json",
                        crossDomain: true,
                        async: true,
                        cache: false,
                        allow: true,
                        success: function (data) {
                            $.each(data, function (index, value) {
                                    BindNotice(value);
                            });
                        },
                        error: function (x, e) {
                       alert('problem while fetching records!');
                        }
                    } );}
从JS文件:

$(".mainwrap .innnerwrap").mCustomScrollbar({
    autoDraggerLength:true,
    autoHideScrollbar:true,
    scrollInertia:100,
    advanced:{
        updateOnBrowserResize: true,
        updateOnContentResize: true,
        autoScrollOnFocus: false
    },
     callbacks:{
            whileScrolling:function(){WhileScrolling();},
            onTotalScroll: function () {
            callMoreData();
        }

    }
});

使用全局变量阻止对此函数的其他请求

比如:

 var allow = true;
 function (data) {
     if(allow == true){
          allow = false;
          $.each(data, function (index, value) {
              BindNotice(value);
          });
          allow = true;
     }
 }

您可以调用另一个函数,然后在第一次执行后将其设置为不执行任何操作

function (data) {
    updateData(data);
}
function updateData(data) {
    updateData = function(data) {};
    $.each(data, function (index, value) {
        BindNotice(value);
    });
}

我对代码做了一些编辑,因为它听起来更像是你得到了多个事件,而他们是在写以前的事件。在第一次调用之后,函数基本上设置为不执行任何操作。因此,第一个回调将是唯一调用
BindNotice
的回调

编辑

正如我在评论中提到的,要再次通过此通道接收数据,您需要恢复
updateData
。下面是一个例子:

function restoreUpdateData() {
    updateData = function(data) {
        updateData = function(data) {};
        $.each(data, function (index, value) {
            BindNotice(value);
        });
    };
}

尝试这样做:如果(index==data.length){return false;}循环不会再次从0开始,因此您的函数(data)会被再次调用,因为它很可能是滚动事件,它会继续执行。每个循环只执行一次,它不会自行重新启动。我们能看到触发此函数的代码吗?@sureraldream可能通过Ajax调用获得成功。以这种方式“放置”您的答案有点粗鲁。如果您还没有准备好完整的答案,请使用注释。SO使用积分并不意味着这是一场竞争。我给了我答案“使用全局变量阻止对该函数的其他请求”。不幸的是,这似乎不起作用。现在没有数据加载到scroll上。这会使用索引0中的值重复BindNotice函数。@NewbieProgrammer,是的,很抱歉我误解了你的问题。我做了一个编辑,只允许执行对这个函数的第一次调用(因为听起来好像在第一次完成之前,您收到了对函数的多次调用)。编辑后的脚本执行得非常完美。非常感谢你!非常感谢。@NewbieProgrammer,您需要注意的是,如果您想再次运行它,您需要还原
updateData
函数。还原updateData函数是什么意思?