ボタンをクリックした際にクリック済みを表すクラスを付ける場合は jQuery の addClass() や toggleClass() を使用すれば簡単です。
toggleClass() はクリックするごとにつけたり外したり出来ます。
<script> $(function(){ $('.btn').on('click', function(event){ event.preventDefault(); $(this).toggleClass('active'); }); }); </script>
これでクラス名「btn」を持つ要素をクリックした際、その要素に「active」というクラスが追加されます。
クリック済みの要素の色を変えるだけなら「.btn.active」に対して CSS を書くだけで終わりです。
しかし、クリックしたらボタンの文字を書き換えたい場合、更に一工夫必要です。
javascript を使って書き換えてしまうなら jQuery の html() で変更できます。
data属性を使ってデフォルトの文字「data-text-default」、クリック後の文字「data-text-clicked」を持たせて、ボタンの状態に応じてテキストを書き換えます。
hasClass() を使うとクラス active を持っているかどうかを簡単に確認できます。
<a class="btn" data-text-default="Click" data-text-clicked="Done" href="#">Click</a>
$(function(){ $('.btn').on('click', function(event){ event.preventDefault(); $(this).toggleClass('active'); if($(this).hasClass('active')){ var text = $(this).data('text-clicked'); } else { var text = $(this).data('text-default'); } $(this).html(text); }); });
変更後の文字が単純な場合や、javascript を自由に書き換えられる状態ならこれでも良いのですが、そうでない場合は CSS で切り替えを表現します。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS</title> <script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script> <style> .btn { display: block; width: 96px; height: 32px; line-height: 32px; background-color: #3692ff; color: #fff; text-align: center; } .btn.active { background-color: #ccc; } .btn > span:last-of-type, .btn.active > span:first-of-type { display: none; } .btn.active > span:last-of-type { display: inline; } </style> <script> $(function(){ $('.btn').on('click', function(event){ event.preventDefault(); $(this).toggleClass('active'); }); }); </script> </head> <body> <a class="btn" href="#"> <span>Click</span> <span>Done</span> </a> </body> </html>
ボタン要素 <a> 内にある2つの span のうち、最初のものがデフォルトに表示され、2番めがクリック後に表示されます。
必要に応じて <span> 内で <img> などを使っても構いません。
クラス active がつけられると、最初の span が非表示にされ、2番めの span が表示されます。
CSS はやや複雑ですが、Javascript 部分はクラスをつける処理だけあればいいので簡潔に出来ます。
Similar Posts:
- [PHP, JS]jQueryのAjaxによるPHP、Javascript間の送受信(JSON)
- [PHP][jQuery]Ajax(非同期通信)を使ったチャット
- [PHP]背景の明るさを基準に見やすい文字色を組み合わせる(YUV輝度)
- [JS]画像ファイルアップロード前にプレビューを表示する
- [HTML, CSS]CSSのクラスやIDの命名規則とよく使われる名前
- [PHP][JS, Ajax]郵便番号を住所に変換する
- CSS3を使ったアニメーションの作り方
- [JS][jQuery]フォームから複数のファイルをアップロード(入力欄の動的追加)