Javascript jQuery切换函数在一段时间后失败

Javascript jQuery切换函数在一段时间后失败,javascript,jquery,Javascript,Jquery,我编写了一个jQuery切换函数,如下所示: // category filter $.fn.clickToggle = function(a, b) { var ab = [b, a]; function cb(){ ab[this._tog^=1].call(this); } return this.on('click', cb); }; $.fn.swapClass = function(oldClass, newClass) { return $(this).remov

我编写了一个jQuery切换函数,如下所示:

// category filter
$.fn.clickToggle = function(a, b) {
  var ab = [b, a];
  function cb(){ ab[this._tog^=1].call(this); }
  return this.on('click', cb);
};

$.fn.swapClass = function(oldClass, newClass) {
  return $(this).removeClass(oldClass)
                .addClass(newClass)
                .fadeIn('fast');
};

$('.category-filter').clickToggle(function() {
  // clear old
  $('.category-filter').each(function() {
    $(this).fadeTo('fast', 1.0);
    $(this).swapClass('label-success', 'label-default');
  })

  // get new
  var category = $(this).attr('data-category');
  $(this).swapClass('label-default', 'label-success');

  // apply new
  $('.category-filter').each(function() {
    if (!($(this).attr('data-category').indexOf(category) >= 0)) {
      $(this).fadeTo('fast', 0.5);
    }
  })
  $('.article_container').each(function() {
    if ($(this).attr('data-categories').indexOf(category) >= 0) {
      $(this).fadeIn('fast');
    } else {
      $(this).fadeOut('fast');
    }
  })
}, function() {
  $(this).swapClass('label-success', 'label-default');
  $('.article_container').each(function() { $(this).fadeIn('fast') })
  $('.category-filter').each(function() { $(this).fadeTo('fast', 1.0) })
});
它可以正常工作,请参见JSFIDLE-但是在单击一个链接,然后“跳过”单击另一个链接之后,切换似乎中断了


我的功能有什么问题?我如何更改它,以便它切换用户是再次单击同一链接还是下一个链接?

这是因为即使在单击某个元素时更改了其他元素的样式,也没有更改
\u tog

您正试图以两种不同的方式维持状态。一个通过.\u tog,另一个通过类标签success/label default。我建议不要使用
。\u tog
,而是依赖于类。事实上,我会大大简化整个javascript

抱歉,这只是一个简单的回答,我必须运行,但您可以这样做:

$('.category filter')。单击(函数(){
$('.category filter').not(this.removeClass('active');
$(this.toggleClass('active');
});
.category filter{背景色:#777;过渡:all.5s ease in out;}
.category-filter.active{颜色:绿色;背景色:#5cb85c;}
.category filter.active[data category='custom article']~div>.article\u容器:非([data categories*='custom article']),
.category filter.active[data category='retirement']~div>。文章容器:非([data categories*='retirement']),
.category filter.active[data category='property']~div>。文章容器:非([data categories*='property']))
{
显示:无;
}

海关物品
退休
财产
习俗

另一种习俗

退休

财产

财产和退休


这是因为,即使在单击一个元素时更改了其他元素的样式,也没有更改
\u tog

您正试图以两种不同的方式维持状态。一个通过.\u tog,另一个通过类标签success/label default。我建议不要使用
。\u tog
,而是依赖于类。事实上,我会大大简化整个javascript

抱歉,这只是一个简单的回答,我必须运行,但您可以这样做:

$('.category filter')。单击(函数(){
$('.category filter').not(this.removeClass('active');
$(this.toggleClass('active');
});
.category filter{背景色:#777;过渡:all.5s ease in out;}
.category-filter.active{颜色:绿色;背景色:#5cb85c;}
.category filter.active[data category='custom article']~div>.article\u容器:非([data categories*='custom article']),
.category filter.active[data category='retirement']~div>。文章容器:非([data categories*='retirement']),
.category filter.active[data category='property']~div>。文章容器:非([data categories*='property']))
{
显示:无;
}

海关物品
退休
财产
习俗

另一种习俗

退休

财产

财产和退休


这是因为,即使在单击一个元素时更改了其他元素的样式,也没有更改
\u tog

您正试图以两种不同的方式维持状态。一个通过.\u tog,另一个通过类标签success/label default。我建议不要使用
。\u tog
,而是依赖于类。事实上,我会大大简化整个javascript

抱歉,这只是一个简单的回答,我必须运行,但您可以这样做:

$('.category filter')。单击(函数(){
$('.category filter').not(this.removeClass('active');
$(this.toggleClass('active');
});
.category filter{背景色:#777;过渡:all.5s ease in out;}
.category-filter.active{颜色:绿色;背景色:#5cb85c;}
.category filter.active[data category='custom article']~div>.article\u容器:非([data categories*='custom article']),
.category filter.active[data category='retirement']~div>。文章容器:非([data categories*='retirement']),
.category filter.active[data category='property']~div>。文章容器:非([data categories*='property']))
{
显示:无;
}

海关物品
退休
财产
习俗

另一种习俗

退休

财产

财产和退休


这是因为,即使在单击一个元素时更改了其他元素的样式,也没有更改
\u tog

您正试图以两种不同的方式维持状态。一个通过.\u tog,另一个通过类标签success/label default。我建议不要使用
。\u tog
,而是依赖于类。事实上,我会大大简化整个javascript

抱歉,这只是一个简单的回答,我必须运行,但您可以这样做:

$('.category filter')。单击(函数(){
$('.category filter').not(this.removeClass('active');
$(this.toggleClass('active');
});
.category filter{背景色:#777;过渡:all.5s ease in out;}
.category-filter.active{颜色:绿色;背景色:#5cb85c;}
.category filter.active[data category='custom article']~div>.article\u容器:非([data categories*='custom article']),
.category filter.active[data category='retirement']~div>。文章容器:非([data categories*='retirement']),
.category filter.active[data category='property']~div>。文章容器:非([data categories*='property']))
{
显示:无;
}

海关物品
退休
财产
习俗

另一种习俗

退休

财产

财产和退休