如何在jQuery中只显示一次警报

时间:2016-06-14 06:47:30

标签: javascript jquery

我有一个jquery函数,当用户每次在下面滚动时加载更多帖子

这是jquery代码

$(function() {
    var $timeline = $('#tupdate'),
        $spinner = $('#loading').hide();

    function loadMore() {
        $(window).unbind('scroll.posts');
        $spinner.show();
        $.ajax({
            url: "/ajax/loadmore?lastPost=" + $(".pointer:last").attr('id'),
            success: function(html) {
                if (html) {
                    $timeline.append(html);
                    $spinner.hide();
                } else {
                    $spinner.hide();
                    bootbox.alert('No more post available');
                }
                $(window).bind('scroll.posts', scrollEvent);
            }
        });
    }
    //lastAddedLiveFunc();
    $(window).bind('scroll.posts', scrollEvent);

    function scrollEvent() {
        var wintop = $(window).scrollTop(),
            docheight = $(document).height(),
            winheight = $(window).height();
        var scrolltrigger = 0.95;
        if ((wintop / (docheight - winheight)) > scrolltrigger) loadMore();
    }
});

现在的问题是,每当用户向下滚动弹出窗口时,每次都会激怒用户,我该如何只提醒一次?

这是我尝试的内容

if (!g) {
    var g = 1;
    bootbox.alert('No more Post');
}

但每当我瘫痪时,它仍会保持警惕

4 个答案:

答案 0 :(得分:1)

您正在使用回调内部的范围初始化一个新变量,该值不能在下一个回调中获得,因此请更新全局变量。最好使用布尔值而不是数字。

if(!g){
  g = true;
  bootbox.alert('No more Post'); 
}

答案 1 :(得分:0)

您必须在g之外声明$(function(){才能使其成为全球性的。

所以你的代码看起来像这样:

var g = false;

$(function() {
    var $timeline = $('#tupdate'),
        $spinner = $('#loading').hide();

    function loadMore() {
        $(window).unbind('scroll.posts');
        $spinner.show();
        $.ajax({
            url: "/ajax/loadmore?lastPost=" + $(".pointer:last").attr('id'),
            success: function(html) {
                if (html) {
                    $timeline.append(html);
                    $spinner.hide();
                } else {
                    $spinner.hide();
                    if (!g) {
                        bootbox.alert('No more post available');
                    }
                }
                $(window).bind('scroll.posts', scrollEvent);
            }
        });
    }
    //lastAddedLiveFunc();
    $(window).bind('scroll.posts', scrollEvent);

    function scrollEvent() {
        var wintop = $(window).scrollTop(),
            docheight = $(document).height(),
            winheight = $(window).height();
        var scrolltrigger = 0.95;
        if ((wintop / (docheight - winheight)) > scrolltrigger) loadMore();
    }
});

答案 2 :(得分:0)

您在范围内声明g。为了便于阅读,我已将其重命名为showAlert

  // Declare outside of `loadMore()`.
  var showAlert = true; // True by default.

  function loadMore(){

    $(window).unbind('scroll.posts');
    $spinner.show();

    $.ajax({
      url: "/ajax/loadmore?lastPost="+ $(".pointer:last").attr('id'),
      success: function(html){
          if(html){
              $timeline.append(html);
              $spinner.hide();
          }else{
            $spinner.hide();
              if (showAlert)
              {
                  bootbox.alert('No more post available');
                  showAlert = false; // don't show no more.
              }
          }

          $(window).bind('scroll.posts',scrollEvent);
      }
    });
  }

答案 3 :(得分:0)

中删除var
if(!g){
 g =1;
bootbox.alert('No more Post'); 

}

因此g将作为全局变量工作。