
jQueryのtoggle()がうまく動かない
さくっと効果的に実装したい
Webサイトの要素をスムーズに表示・非表示に切り替えたい
jQueryのtoggle()は、要素の表示と非表示を簡単に切り替える機能です。
jQueryのtoggle()は単に表示切り替えるだけでなく、同時にアニメーション化できるため、インタラクティブなWebサイト制作には欠かせません。
本記事では、jQueryのtoggle()の基本的な使い方から応用までサンプルコード付きで丁寧に解説します。
失敗しないコーディングのコツも紹介するので、ぜひ最後までお読みください。
jQuery toggle()の基本
まずは、jQueryにおける表示・非表示切り替えの基本について解説します。
- toggle()でできること
- toggle()の基本的な書き方
- toggle() ボタンクリックの開閉サンプル
toggle()について理解を深めていきましょう。
toggle()でできること
jQueryのtoggle()は、指定したHTML要素の表示状態と非表示状態を実行するたびに交互に切り替える機能です。
具体的には、要素のCSSにおけるdisplayプロパティの値を操作します。
要素が現在表示されていれば、toggle()の実行で「ボタンをクリックで詳細情報が表示され、再クリックで隠れる」といったWebサイトでよく使われる簡単な実装が可能です。
toggle()の基本的な書き方
toggle()の基本的な記述方法は非常にシンプルです。
jQuery(セレクタ).toggle(); |
jQuery(セレクタ)の部分で、表示・非表示を切り替えたいHTML要素を指定します。
CSSセレクタと同じ記法で、ID (#myElement)、クラス (.myClass)、要素名 (p)などを指定可能です。
toggle()は指定したセレクタに該当する要素に対して、表示・非表示の切り替えをします。
toggle() ボタンクリックの開閉サンプル
toggle()でボタンをクリックするたびに、特定のテキストエリアが表示されたり隠れたりする動きを実装してみましょう。
コピー<button id="myButton">詳細を表示/非表示</button><div class="secret-content">
<p>この部分は通常は隠れています。</p>
<p>ボタンをクリックすると表示され、もう一度クリックすると非表示に戻ります。</p>
<p>toggle()メソッドは直感的で便利です。</p>
</div>
コピー#myButton {
width: 200px;
padding: 12px;
font-size: 16px;
font-weight: 600;
color: #fff;
background: linear-gradient(135deg, #6b73ff 0%, #000dff 100%);
border: none;
border-radius: 30px;
cursor: pointer;
box-shadow: 0 4px 12px rgba(0, 13, 255, 0.3);
transition: transform 0.2s ease;
}
#myButton:hover {
transform: scale(1.05);
}
.secret-content {
display: none;
width: 100%;
max-width: 400px;
margin-top: 20px;
padding: 20px;
border: 1px solid #dae1e7;
border-radius: 12px;
background-color: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
color: #333;
line-height: 1.6;
}
.secret-content p {
margin-bottom: 12px;
}
コピーjQuery(document).ready(function() {
jQuery('#myButton').on('click', function() {
jQuery('.secret-content').toggle();
console.log('toggle()が実行されました。');
});
});
CSSでsecret-contentクラスを非表示に設定し、ページ読み込み時には見えないようにします。
jQueryでは、ボタンをクリックすると、要素の表示・非表示の切り替えができるようにjQuery(‘.secret-content’).toggle() を記述します。
また、動作確認のためにconsole.log()で「toggle()が実行されました」とブラウザのコンソールに表示させており、トグル動作の発火確認がブラウザ上で可能です。
toggle()とtoggleClass()の違い
jQueryにはtoggle()と非常によく似た名前のtoggleClass()があります。
ここでは、以下の2つについて紹介します。
- toggle()とtoggleClass()比較表と基本動作
- toggle()とtoggleClass()の使い分け
どちらも要素の状態を切り替える際に役立ちますが、目的と動作原理は明確に異なるため、状況に応じて適切に使い分けましょう。
toggle()とtoggleClass()比較表と基本動作
まずは、toggle()とtoggleClass()の主な違いを表で比較してみましょう。
toggle() | toggleClass() | |
目的 | 要素の表示・非表示を切り替える | 要素のクラス属性を追加・削除する |
操作対象 | CSSのdisplayプロパティ | HTML要素のclass属性 |
基本的な動作 | display: none; と表示状態を交互に切り替え | 指定したクラス名を要素に追加、または削除する |
見た目の変化 | 要素自体が出現したり消えたりする | クラスに応じたCSSが適用され、スタイルが変わる |
構文例 | jQuery(セレクタ).toggle(); | jQuery(セレクタ).toggleClass(‘クラス名’); |
使用例 | Q&Aのアコーディオン、詳細情報の開閉 | ボタンスタイルの変更、メニューのアクティブ表示など |
toggle()は要素の表示・非表示を直接切り替えます。表示中の要素は非表示に、非表示の要素は表示状態になります。
toggleClass()はクラス名の有無を切り替えるだけです。指定したクラスがなければ追加し、すでにあれば削除します。
toggleClass()自体は見た目を変えるわけではなく、追加または削除されたクラスに対応するCSSスタイルがあってはじめて見た目が変わります。
toggle()とtoggleClass()の使い分け
toggle()とtoggleClass()の使い分けを以下の表にまとめました。
toggle() | toggleClass() | |
主な機能 | 要素の表示/非表示 | CSSクラスの追加/削除 |
メリット | ・コードがシンプル ・直感的に使用可 |
・CSSで柔軟なスタイル制御 ・複数状態の管理が容易 ・ほかのJS処理と連携しやすい |
デメリット | ・表示/非表示以外の状態管理に不向き ・CSSでのスタイル制御が限定的 |
・単純な表示/非表示にはやや冗長 ・CSSの知識がある程度必要 |
利用シーン | 要素の存在自体をON/OFFしたいとき | 要素の状態や見た目をクラスで管理・変更したいとき |
toggle()は、要素を見せたり隠したりするだけのシンプルな場合に便利です。
toggleClass()は、表示状態だけでなく、色や形などのスタイル変更や、複数の状態管理をしたい場合に力を発揮します。
それぞれのメリット・デメリットを理解し、実現したい挙動に応じて最適な方を選びましょう。
jQueryのtoggleアニメーションの活用法
要素の表示・非表示を切り替えるとき、スライドやフェードといったアニメーションを加えることで、より洗練されたユーザー体験を提供できます。
- slideToggle() のスライドアニメーション
- fadeToggle() のフェードアニメーション
- アニメーション速度の調整方法
- アニメーション完了後の追加処理
それぞれ気になるところからチェックしてみてください。
jQuery 3.0以降、toggle()のアニメーション機能は廃止されました。現在のtoggle()は、表示・非表示をすぐに切り替えるだけの機能です。以前の「jQuery(セレクタ).toggle(‘slow’);」のような書き方は、最新バージョンではエラーが発生したり、期待した動作をしなくなったりするため注意しましょう。
slideToggle() のスライドアニメーション
slideToggle()は、FAQセクションのアコーディオン実装に最適です。要素を縦方向にスライドアニメーションさせながら表示・非表示を切り替えます。
slideToggle()の基本構文は以下の通りです。
jQuery(セレクタ).slideToggle(); |
上にある動画のコードを見てみましょう。
コピー<div class="accordion">
<div class="accordion-header">質問1:slideToggle()とは何ですか?</div>
<div class="accordion-content">
<p>要素を縦方向にスライドさせながら表示・非表示を切り替えるjQueryメソッドです。アコーディオンUIの実装によく使われます。</p>
</div>
</div>
<div class="accordion">
<div class="accordion-header">質問2:どうやって使いますか?</div>
<div class="accordion-content">
<p>基本的な構文は <code>$(セレクタ).slideToggle();</code> です。アニメーション速度や完了後の処理も指定できます。</p>
</div>
</div>
コピー.accordion {
margin-bottom: 10px;
border: 1px solid #dee2e6;
border-radius: 4px;
overflow: hidden;
}
.accordion-header {
background-color: #e9ecef;
padding: 15px 20px;
cursor: pointer;
font-weight: bold;
}
.accordion-content {
display: none; /* 初期状態は非表示 */
padding: 20px;
border-top: 1px solid #dee2e6;
background-color: #fff;
}
コピーjQuery(document).ready(function() {
jQuery('.accordion-header').on('click', function() {
jQuery(this).next('.accordion-content').slideToggle();
});
});
HTMLを見ると、accordion-headerクラスが質問の見出し、すぐ下にあるaccordion-contentクラスが答えで隠れている部分です。
CSSでは、accordion-contentにdisplay: none; を指定して、最初から答えが見えないようにしましょう。
jQueryのコードでは、jQuery(‘.accordion-header’).on(‘click’, …) で、accordion-headerクラスがクリックされたときに、クリックされたヘッダーの直後にあるコンテンツ部分を選択するよう指定しています。
選ばれた要素に対して.slideToggle() で開閉する動きが実行されています。
fadeToggle() のフェードアニメーション
fadeToggle()は、要素が徐々に透明になったり、逆に少しづつ現れたりする柔らかい印象のアニメーションです。
要素をフェードイン・フェードアウトさせながら表示・非表示を切り替えます。
fadeToggle()の基本構文は、slideToggle()とほぼ同じです。
jQuery(セレクタ).fadeToggle(); |
slideToggle()のアコーディオンサンプルで、JavaScriptの該当行をjQuery(this).next(‘.accordion-content’).fadeToggle(); のように変更するだけで、フェード効果がある開閉に変わります。
アニメーション速度の調整方法
slideToggle()のスライドやfadeToggle()のフェードアニメーションは、動きの速さを自由に調整できます。どちらも速度の調整方法は全く同じです。
速度は、数値と文字列で指定します。詳細を以下の表にまとめました。
数値 | 文字列 | |
内容 | ミリ秒単位で指定 | ・fast :素早く ・slow:ゆっくり ・swing:デフォルト ・linear:一定の速度 |
書き方 | jQuery(セレクタ).slideToggle(600); →0.6秒かけてスライドする |
jQuery(セレクタ).slideToggle(‘slow’); |
アニメーションの実行時間を数値で指定するときは、ミリ秒単位(1000ミリ秒=1秒)を使用します。
重要なのは、数値が大きいほどアニメーションがゆっくり動作することです。
文字列はスピードがあらかじめ定義されており、slowは約600ミリ秒、fastは約200ミリ秒に相当します。
速度を指定しない場合は、デフォルトの約400ミリ秒でアニメーションが実行されます。
コンテンツの内容やサイト全体のデザインに合わせて、ユーザーにとって心地よいと感じる速度を選んでみてください。
速すぎると変化が分かりにくく、遅すぎるとユーザーを待たせてしまうため、適切な速度に調整することが大切です。
アニメーション完了後の追加処理
slideToggle()やfadeToggle()のアニメーションは実行に時間がかかります。
アニメーションが完全に終了したあとで特定の処理を実行したい場合、メソッドの直後にコードを書いても意図した通りに動作しません。
アニメーションが終わる前にコードが実行されてしまうため、後で呼び出すためのコールバック関数を使用します。
コールバック関数とは、アニメーションなどの時間がかかる処理(非同期処理)が完了したタイミングで実行されるよう設定された関数です。
コールバック関数の使い方は、slideToggle() と fadeToggle() で共通しています。
具体的な例を見てみましょう。
コピーjQuery('#slideContent').slideToggle('fast', function() {
console.log('スライド完了!');
jQuery(this).addClass('is-open');
});
function() { … } の { } の中に、アニメーションが終わったあとに実行したい命令を書きます。
今回は#slideContent をfastでスライドさせ、終わったら「スライド完了!」を表示させます。
コールバック関数を使うと、アニメーションが終わった正確なタイミングで、メッセージを表示したり、色を変えたり、ほかの処理の実行が可能です。
jQuery toggle()のよくあるミスと原因
コードを書いたのにトグルが動かないことは、jQuery初心者によくあるつまずきポイントです。
ここではよくあるミスと原因を紹介します。
- jQueryの読み込み
- セレクタの問題
- CSSの競合や優先度の問題
- クラス名のタイプミス
間違えやすいポイントを把握して、スムーズにコーディングできるようになりましょう。
jQueryの読み込み
まず確認すべきは、jQueryライブラリが正しく読み込まれているかどうかです。
ブラウザの開発者ツールのコンソールタブで、「jQuery is not definedやjQuery is not defined」といったエラーが出ていないか確認しましょう。
エラーがあれば、HTMLファイル内のjQueryライブラリを読み込む<script>タグの記述(CDNのURLやファイルパス)を見直してください。
次に、jQueryの読み込み順序も重要です。jQueryライブラリ本体の<script>タグは、jQueryコードの<script>タグよりも前(HTMLの上部)に記述する必要があります。
セレクタの問題
セレクタの指定ミスも非常に多い原因です。
開発者ツールのコンソールで jQuery(‘セレクタ’) と入力し、Enterキーを押して結果を確認します。
もし [] や null、undefined などで要素数が0になっていれば、セレクタの記述が間違っている可能性が高まります。
HTML側のIDやクラス名と完全に一致しているか、#(ID)と.(クラス)を間違えていないかなどを慎重に確認しましょう。
jQueryのコードが jQuery(document).ready(function() { … }); や $(function() { … }); で囲まれていない場合、HTML要素が読み込まれる前に処理が実行され、要素が見つからずエラーになることがあります。
jQueryのコードは基本的にjQuery(document).ready() の中に記述する習慣をつけましょう。
CSSの競合や優先度の問題
ほかのCSSルールが優先されている可能性も考えられます。
開発者ツールの要素またはElementsタブで、操作したい要素を選択し、適用されているCSSスタイルを確認しましょう。
特にdisplayプロパティが、ほかのCSSルール(特に !important が付いているものや、より詳細度の高いセレクタ)によって上書きされていないか検証する必要があります。
上書きされている場合は、CSSのセレクタの書き方を見直し、意図したスタイルが適用されるように調整します。
!important の使用は最終手段とし、できるだけセレクタの詳細度で解決することを目指しましょう。
toggleClass()を使っている場合は、クラスに対応するCSS定義がないという可能性もあります。
toggleClass(‘my-active-class’) でクラスを追加・削除していても、CSS側で .my-active-class { … } というスタイル定義がなければ、見た目上の変化は起こりません。
追加・削除するクラス名に対応するスタイルをCSSファイルに正しく記述しましょう。
クラス名のタイプミス
toggleClass() が期待通りに動作しない場合は、クラス名のタイプミスも確認しましょう。
toggleClass(‘avtive’) のように、指定しているクラス名がCSSで定義したクラス名と完全に一致しているか見直してください。
また、toggleClass()を適用する対象要素の指定が正しいかも重要です。
クリックした要素自身にクラスを付けたい場合はjQuery(this) を使い、ほかの要素に付けたい場合は正しいセレクタを指定する必要があります。
さらに、意図せず同じ要素に対して複数のイベントが設定され、toggleClass() が複数回実行されたり、ほかの処理と競合したりしていないかも調べましょう。
デバッグの際は、開発者ツールのコンソールに console.log() で変数の中身や処理の通過を確認するログを出力するのも有効な手段です。
まとめ
toggle()はシンプルな表示/非表示切り替えの基本であり、toggleClass()はクラス属性を操作して表示状態だけでなくスタイルや振る舞いを動的に変更する場合に有効です。
slideToggle()やfadeToggle()は、アニメーションを伴うスムーズな表示/非表示切り替えを実現し、速度調整や完了後処理も可能です。
これらのメソッドの特徴を理解し、場面に応じて適切に使い分けることで、ユーザーにとって分かりやすく、魅力的なインタラクションをWebサイトに実装できます。
jQueryだけでなく、HTML、CSS、JavaScriptの基礎から実践的なWebサイト構築まで体系的に学ぶことはWeb制作者にとって重要な要素といえます。
Web制作者としてキャリア形成を目指すなら、現場で求められるスキルを着実に身につけられるデイトラWeb制作コースがおすすめです。
未経験からWebスキルを身につけるならデイトラがおすすめ!
デイトラは、本格的なWebスキルをつけて仕事につなげるオンライン講座を運営しています。
Web制作コースをはじめ、Shopifyコースやドローンコース、LINE構築コースなど、さまざまなコースがあります。
はじめての分野を学ぶときに陥りやすいのは、質問できる環境がなくて挫折してしまうことです。
デイトラではどのコースでも現場で活躍するメンターのサポートが受けられます。質問ができることはもちろん、Web制作コースやWebデザインコースライティングコースなどでは丁寧な課題添削もあります。
プロから直接指導が受けられ、独学よりも得られるものは大きく、どんどんスキルアップするでしょう。
さらに、デイトラではカリキュラムが随時アップデートされます。受講すると、無料で追加コンテンツも閲覧可能で、いつでも最新スキルを学べる環境が整っています。
未経験からWebスキルを武器に一歩を踏み出したい方は、ぜひデイトラをチェックしてみてください。