質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

12763閲覧

ClassList.toggleで複数のクラスをtoggleする方法

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/04/25 12:38

編集2017/04/26 02:04

ClassList.toggleで複数のクラスをtoggleする方法があれば、ご教示いただけると助かります。

エラー Uncaught TypeError: Cannot read property 'toggle' of undefined

document.getElementById('drawer-toggle').addEventListener('click', () => { document.getElementsByClassName('back_screen').classList.toggle('back'); document.getElementsByClassName('back_screen').classList.toggle('open'); }, false);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/04/26 02:43

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。
guest

回答3

0

ベストアンサー

TypeError: Cannot read property 'toggle' of undefined

複数のclassをtoggleする手法は既出の回答通りですが、質問文のコードで TypeError が発生する事はあり得ないのでエラーの原因は別にあるように思います。
エラーは classListundefined である事を表していますが、classList は Element 上に存在する為、要素ノード以外から参照している可能性があります。
仮に質問文のコードが実コード(エラーが発生するコード)と同じなのであれば、document.body が構築される前に呼び出している可能性があります。
(実コードが別なら、エラーを再現可能なコードを開示すると良いと思います)

classList#toggle

classList#toggle は複数のクラスを指定する動作をサポートしていません。

また、classList#toggle の第二引数は「add(), remove() の挙動を強制する為の引数」になります。

  • 第二引数が trueadd() を強制する
  • 第二引数が falseremove() を強制する

JavaScript

1document.body.classList.toggle('back','open');

この場合、'open' は Boolean 型に変換されて true となる為、「backクラス」が追加される動作が強制されます。

Re: ryuseiasa さん

投稿2017/04/25 13:15

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/26 02:06

実コードが間違っていたため修正いたしました。 ご確認いただけると幸いです。
think49

2017/04/26 05:06

問題が全く変わっています。 初めの質問では classList.toggle('back','open'); になっていましたが、今は第二引数がありません。 これは回答を受けて質問内容を変えたのではないでしょうか。 初めからこのコードだったのなら、私の回答が全くの無駄になります。 質問前に質問文にあるコードだけで「問題が再現されること」を必ず確認して下さい。 掲示板は質問者一人のものではなく、同じ問題に遭遇した人が解決するための情報となる事に留意し、回答と質問の整合性を損なわないよう編集をお願いします。 getElementsByClassName は HTMLCollection を返すので繰り返し処理しなければ、classList を参照出来ません。 for, Array#forEach, for-of 等を活用して対応して下さい。 https://teratail.com/questions/73754 でも同じような回答を貰っているようですが…。
退会済みユーザー

退会済みユーザー

2017/04/26 07:32

私の不手際でご迷惑をおかけしてしまい申し訳ございません。 今後、編集などには細心の注意を払いたいとおもいます。
guest

0

JavaScript

1 document.getElementById('drawer-toggle').addEventListener('click', () => { 2 document.body.classList.toggle('back'); 3 document.body.classList.toggle('open'); 4 }, false);

【classList APIの複数引数について - Qiita】
http://qiita.com/sounisi5011/items/c42c51c7ffe4116ecd10

投稿2017/04/25 12:44

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

要素にClassを使わずIDを使用することでとりあえずは解決いたしました。

document.getElementById('drawer-toggle').addEventListener('click', () => { document.getElementById('back_screen').classList.toggle('back'); document.getElementById('back_screen').classList.toggle('open'); }, false);

投稿2017/04/26 07:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問