JQuery - untoggle - removeClass未定义

时间:2016-07-20 12:27:58

标签: javascript jquery html

我有一个带按钮的简单页面。点击该按钮后,文本会显示在此按钮下方toggle

这项工作是正确的,但它没有“解开”其他部分/按钮。所以我想要的是点击不仅切换按钮下的部分,而且还解开另一个切换部分。

我在点击后立即执行的所有部分都添加了一个循环,它应该“隐藏”所有部分,然后执行它必须执行的操作 - 显示this部分。

  

ncaught TypeError:acc.removeClass不是函数

$(document).ready(function(){
    var accs = $('.accordion');

   $('.accordion').on('click',function(){
       $.each(accs,function(acc){
           acc.removeClass('active'); # NOT WORKING
           acc.nextElementSibling.classList.remove('show'); # NOT WORKING
       });

       this.classList.toggle('active'); # WORKING
       this.nextElementSibling.classList.toggle("show"); # WORKING

   })
});

你知道问题出在哪里吗?

4 个答案:

答案 0 :(得分:4)

$(acc)包装到box-sizing: border-box;中 - 它不是那里的jquery对象。

答案 1 :(得分:3)

accs.removeClass('active'); //remove class from element accs.next().removeClass('show'); //Remove class from sibling 不是本机DOM元素方法,因此您收到错误。将DOM元素转换为jQuery对象,然后就可以使用这些方法。

由于你已经有jQuery对象直接使用它,如

   $.each(accs,function(acc){
       acc.removeClass('active'); # NOT WORKING  
       acc.nextElementSibling.classList.remove('show'); # NOT WORKING         
   });

而不是

from django.db.models.functions import Coalesce

qs = Goods.objects.annotate(
        qty_in=Sum(Coalesce(in_records__quantity, 0)),
        qty_out=Sum(Coalesce(out_records__quantity, 0))
    )

答案 2 :(得分:2)

我希望下面的代码可以正常工作

$(document).ready(function(){
    var accs = $('.accordion');

   $('.accordion').on('click',function(){
       accs.each(function(index){
           $(this).removeClass('active');
           $(this).next().removeClass("show");
       });

       $(this).toggleClass('active');
       $(this).next().toggleClass("show");

   })
});

答案 3 :(得分:0)

问题是acc是每个函数中元素的索引。您需要使用$(this).eq(acc)accs.eq(acc).

$(document).ready(function(){
    var accs = $('.accordion');
    $('.accordion').on('click',function(){
       $.each(accs,function(index){
           accs.eq(index).removeClass("active");
           accs.eq(index).classList.remove("show"); //you don't need next because this each function will remove the class 'active' and 'show' from every accs element regardless
       });

       $(this).toggleClass('active');
       $(this).next().toggleClass("show");
   })
});

现在你将整数(索引)视为一个对象。那不行。