使用jQuery从其他函数检查函数内的是非

时间:2018-12-13 10:59:38

标签: jquery

我已经在现有的投资组合页面上构建了一个jQuery过滤器选项。 关键是,函数中有一个onScroll,当它们位于用户视口中时,该函数会继续在投资组合项上添加“显示”类。

现在,当我的功能处于“运行”状态时,我想禁用此功能。 这是我的代码:

  function filterPortfolio() {
    $('[data-filter]').on('click', function() {

    var filterPortfolioIsRunning = true;
    var filter = $(this);
    var filterVal = $(this).attr('data-filter');
    var filterItems = $('[data-filter-item]');

    filter.toggleClass('active');
    filterItems.removeClass('reveal');
    filterItems.closest('.columns').addClass('hidden');

  if ($('[data-filter]').hasClass('active')) {
            $('[data-filter].active').each(function(){
                var filters = $(this).attr('data-filter');
                var object = $('[data-filter-item][data-filter-val*="' + filters + '"]');

                object.closest('.columns').removeClass('hidden');
                object.addClass('reveal');
            });
  } else {
        filterItems.closest('.columns').removeClass('hidden');
        filterItems.addClass('reveal');
  }
});
}

现在,我将“ filterPortfolioIsRunning”设置为true,并希望在其他jQuery函数中识别出这一点。这段代码:

  function revealProject() {
var scrollTop = $(document).scrollTop();
$('.project').each(function(e) {
  if ($(window).width() > 767 && scrollTop > 0) {
    if (($(this).offset().top + ($(this).height() - 200)) < (scrollTop + $(window).height())) {
      $(this).addClass('reveal');
    }
  } else if ($(window).width() < 768) {
    if (($(this).offset().top) < (scrollTop + $(window).height())) {
      $(this).addClass('reveal');
    }
  }

});
if ($('.project').length > 0) {
  setTimeout(function() {
    $('.projects .columns:nth-child(1) .project, .projects .columns:nth-child(2) .project').addClass('reveal');
  }, 2300);

}

}

我尝试这样做:&& !filterPortfolioIsRunning == true,但是控制台日志显示找不到变量。我该如何工作?

谢谢!

2 个答案:

答案 0 :(得分:1)

请尝试将filterPortfolio移至全局空间,或使用filterPortfolioIsRunning方法并将其存储在元素中,而不是data内的局部变量,如下所示:

function filterPortfolio() {
  $('[data-filter]').on('click', function() {
    var filterPortfolioIsRunning = true;
    // to stuff then save in the element...
    $('[data-filter]').data('filter', filterPortfolioIsRunning);
  });
}
function revealProject() {
  if ( $('[data-filter]').data('filter') ) {
    // no global variables prevent name collision!
  }
}

答案 1 :(得分:0)

变量filterPortfolioIsRunningfilterPortfolio函数内部声明。您应该在该(和任何其他)函数之外声明变量。

这样,您将拥有一个可以从其他函数访问的全局变量。

  • 在函数内部声明变量var n = 1;使其成为该函数的局部变量
  • 在函数内声明变量n = 1;使其成为全局变量
  • 在任何函数之外声明变量n = 1;var n = 1;使其成为全局变量