2016-07-20 11 views
1

私はボタン付きの単純なページを持っています。ボタンをクリックすると、toggleを使用してこのボタンのすぐ下にテキストが表示されます。JQuery - untoggle - removeClassが定義されていません

この作品は正しいですが、別のセクション/ボタンを "アンググル"しません。だから私が望むのは、ボタンの下のセクションをトグルするだけでなく、トグルされた別のセクションのトグルを解除することです。

私はクリック直後に実行されるすべてのセクションにループを追加しました。すべてのセクションを非表示にしてから、何をしなければならないのですか?thisセクションを表示してください。

ncaught TypeError: acc.removeClass is not a function

$(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 

    }) 
}); 

問題がどこにあるか知っていますか?

+0

'acc.removeClass' - >' $(acc).removeClass' –

+0

@RoryMcCrossan 'acc'は、foreach関数内のオブジェクトのインデックスです。それは 'accs.eq(acc)... 'でなければなりません。 –

+0

' $ .each() '関数でさえ、最初のパラメータはキーまたはインデックスの値です。彼は自分の機能に一つの議論しか持っていない。そのページの最初の例を参照してください.https://jsfiddle.net/s748hqfy/ –

答えて

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"); 

    }) 
}); 
4

ラップacc$(acc) - これはjqueryオブジェクトではありません。

+0

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_node_nextsibling - 間に空白を追加すると2つのli要素、結果は "undefined"になります。 –

+0

これは彼がそれを使用している方法では動作しません!それは$(0)、$(1)として表示されます。 'acc'は**どこでも**のオブジェクトではありません。 –

3

removeClass()はDOMエレメントのネイティブメソッドではないため、エラーが発生しています。 DOM要素をjQueryオブジェクトに変換し、メソッドを使用できます。

あなたが既に持っているので、jQueryのは、オブジェクトに直接

accs.removeClass('active'); //remove class from element 
accs.next().removeClass('show'); //Remove class from sibling 

代わりの

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

'nextSibling'が見つからないのはどうですか? –

+0

@RoryMcCrossan、エラーが発生した場合、次のステートメントは実行されますか? – Satpal

+0

となります。私は、OPが各ラインを単独でテストしたと仮定した –

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

を使用する必要があります。それは動作しません。

関連する問題