LoginSignup
18
21

More than 5 years have passed since last update.

aタグのlinkを無効に。

Last updated at Posted at 2016-01-17

リンクをjQueryで動的に無効にしたい。

例えば、2つのボタンがあって片方を押されたらもう片一方を無効にする。
もう一回押されたら無効を解除する。みたいな仕様のとき

btn1(off) btn2(off)

↓ btn1をclick

btn1(on) btn2(diabled)

↓ btn1をclick

btn1(off) btn2(off)

このような仕様をcssとjQueryでさくっと作る。

方針

押されたボタンにbtn-onクラス
無効になったボタンにbtn-disabledクラス
をjQueryで追加する。(クラス名はbootstrapなど利用するライブラリと被らないように。)

HTML

単純に、aタグボタンを2つ。
idをつけておく

btn.html
<a href="javascript:void(0)" id="btn1" class="btn">btn1</a>
<a href="javascript:void(0)" id="btn2" class="btn">btn2</a>

CSS

disabled(押せない状態)のリンクに以下のcssを適用する。

btn.css
.btn {
  /* 適当にボタンっぽいレイアウトにする。 */
}

.btn-on {
  color: #f00; /* わかりやすく色を赤に。 */
}

.btn-disabled {
  pointer-events: none; /* aタグのリンクを無効にする */
  cursor: default;  /* マウスオーバー時のカーソルをdefaultに固定 */
  text-decoration: none;  /* 下線等を消す。 */
}

jQuery

押されたボタンともう片方のボタンをjQueryオブジェクトで取得して,classをadd, removeする。
また、btn1が押された状態なのかbtn2が押された状態なのか、どちらも押されていない状態なのか状態を持っていないといけないので,,,今回はクロージャで実現する。
なにも押されていない状態をstate = 0, 何か押されている状態をstate = 1とする。

idをbtn1, btn2とすると

btn.js

$(function() {
  var state = 0;
  var button_ids = ['btn1', 'btn2']
  var btn_change = function() {
    var clicked_id = $(this).attr('id');
    var clicked = $('#' + clicked_id);
    console.log(button_ids);

    // clickされたボタン以外を取り出す
    disabled_buttons = button_ids.filter(function(v){
      return v != clicked_id;
    });

    console.log(disabled_buttons);
    var another = $('#' + disabled_buttons[0]); /*   複数ボタンがある場合はforなどですべてのボタンを取得*/
    if (state == 0) {
      clicked.addClass('btn-on');
      another.addClass('btn-disabled');
      state = 1;
    } else if (state == 1) {
      clicked.removeClass('btn-on');
      another.removeClass('btn-disabled');
      state = 0;
    }
  }
  $('#btn1').on('click', btn_change);
  $('#btn2').on('click', btn_change);
});

以上で一応動的にボタンの管理ができるはず。
ボタンが複数ある場合や、サーバー側でボタンの管理をしたい場合はボタンの状態管理を工夫する。

18
21
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21