如何阻止Javascript重复该功能?

时间:2014-06-10 13:33:01

标签: javascript jquery

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

这是剧本的主要部分:

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();
        }

    }
});

2 个答案:

答案 0 :(得分:1)

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

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

Demo using alerts.

我对代码进行了一些编辑,因为它听起来更像是你正在获得多个事件而且他们正在编写以前的事件。第一次调用后,该函数基本上设置为什么都不做。因此,第一个回调将是唯一调用BindNotice的回调。

修改

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

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

答案 1 :(得分:0)

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

类似的东西:

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