2017-12-03 5 views
0

これを動作させるのが難しいです。純粋なJavascriptを使用して別のボタンをクリックしたときにクラスからボタンを削除する方法

私はレスポンシブタブ/アコーディオンを持っています。しかし、1つのボタンをクリックすると、クラス「アクティブ」が適用されますが、別のボタンをクリックすると、「アクティブ」クラスは前のボタンに残ります。私はjQueryではなくJavascriptを使用してこれを達成する必要があります。

"Uncaught TypeError:HTMLButtonElementで定義されていない のプロパティ 'remove'を読み取ることができません。ここで

は、現時点では私のコードです:

var accordion = document.getElementsByClassName("accordion"); 
var activeAccordion = document.getElementsByTagName("button"); 
var i; 

for (i = 0; i < accordion.length; i++) { 

    accordion[i].addEventListener("click", function(){ 

    this.classList.toggle("active"); 
    activeAccordion.classList.remove("active"); 

    var panel = this.nextElementSibling; 
    if (panel.style.maxHeight){ 
     panel.style.maxHeight = null; 
    } else { 
     panel.style.maxHeight = panel.scrollHeight + "px"; 
    } 
    }) 
} 
+4

'activeAccordion'が_nodelist_あり、それ自身の' CLASSLISTを持っていないことで、この

activeAccordion.classList.remove("active"); 

を交換してください'メソッド。したがって、そのリストのすべてのノードを反復してクラスを削除する必要があります。 – Andy

+0

ループ内のactiveAccordionは要素のリストです。試してみてください。activeAccordion [0] .classList.remove( "active"); –

+0

上記の解決策でも同じことが実行され、別のアコーディオン/タブは別のものがクリックされたときに開いたままです。 – ImranR

答えて

0

activeAccordion.classList.removeClass("active"); 
+0

残念ながら、これは上記と同じエラーを生成します – ImranR

+0

Ok my bad!しかし、私はaddclass行の上に削除行を追加しようとすると思います – Sonia

関連する問題