QA@IT
«回答へ戻る

いくつか追記しました

5599
 ```
 
 作ろうとしているアプリの動作の都合もあるでしょうから、採用できるかはわかりませんが参考までに。
+
+---
+
+## 追記。
+
+タグの方が自由に追加できるのなら、aタグの外にdivを作って親を無効化してしまうとIE8で同じ様な動作にはなりました。
+しかしChromeではだめだったので、ie8判定は必要になってしまいますね。
+
+```javascript
+  <div>
+  <a id="atag" class="btn" href="javascript:method()">CLICK ME</a>
+  </div>
+```
+
+```javascript
+function method() {
+  alert("click");
+}
+
+$("#atag").on("click",function() {
+  $(this).parent().attr('disabled', true);
+});
+```
+
+あとは IE8の判定自体を簡素化するために、条件付きコメントを使ってしまう手も。
+クリックイベントは上記のdivで囲うパターンでやっていますが他の方法にも使えると思います。
+他のバージョンでIE8モードやIE8 エミュレートモードやエンタープライズモード(IE8相当だった気がする)だとどうなるかはわかりません。
+
+```javascript
+  <script>var isIE8=false;</script>
+  <!--[if IE 8 ]><script>isIE8=true;</script><![endif]-->
+```
+
+```
+$("#atag").on("click",function() {
+  if(isIE8){
+    alert('IE8');
+    $(this).parent().attr('disabled', true);
+  }else{
+    alert('not IE8');
+    $(this).attr('disabled', true);
+  }
+});
+```
+
+href属性もフレームワークが生成しているのでしょうが、もしそうでなければhref属性に複数メソッド記述する方法もあります。
+
+```html
+<a id="atag" class="btn" href="javascript:myMethod();method()">CLICK ME</a>
+```
+
+ぱっと思いついたのはこんなところです。

methodの方で要素を無効化するのではどうでしょう。

一つにはmethod内で実行してほしいメソッド内容を書き換える。

var nextMethod = undefined;
function method() {
  alert("click");
  if(nextMethod !== undefined){
    nextMethod();
    nextMethod = undefined;
  }
}

$("#atag").on("click",function() {
  var $el = $(this);
  nextMethod = function(){ $el.attr('disabled', true); };
});

または、methodにセレクタを渡してしまう

function method(selectorToDisable) {
  alert("click");
  $(selectorToDisable).attr('disabled', true);
}
<!-- html 側でセレクタを指定する必要がある -->
<a id="atag" class="btn" href="javascript:method('#atag')">CLICK ME</a>

※ IE8だとconsole無いのでalertにしてあります。

最初の例の場合はnextMethodを同時に複数で書き換えた場合に片方しか発火しなかったり、順序性が保証されているかを気にしなければなりません。
後の例では実行タイミングが変わるので気をつけないといけないかもしれません。


methodを常に呼ぶならclickイベントでmethodを呼ぶ手もあるかもしれません。

var nextMethod = undefined;
function method($el) {
  alert("click");
  $el && $el.attr('disabled', true);
}

$("#atag").on("click",function() {
  method($(this));
});

作ろうとしているアプリの動作の都合もあるでしょうから、採用できるかはわかりませんが参考までに。


追記。

タグの方が自由に追加できるのなら、aタグの外にdivを作って親を無効化してしまうとIE8で同じ様な動作にはなりました。
しかしChromeではだめだったので、ie8判定は必要になってしまいますね。

  <div>
  <a id="atag" class="btn" href="javascript:method()">CLICK ME</a>
  </div>
function method() {
  alert("click");
}

$("#atag").on("click",function() {
  $(this).parent().attr('disabled', true);
});

あとは IE8の判定自体を簡素化するために、条件付きコメントを使ってしまう手も。
クリックイベントは上記のdivで囲うパターンでやっていますが他の方法にも使えると思います。
他のバージョンでIE8モードやIE8 エミュレートモードやエンタープライズモード(IE8相当だった気がする)だとどうなるかはわかりません。

  <script>var isIE8=false;</script>
  <!--[if IE 8 ]><script>isIE8=true;</script><![endif]-->
$("#atag").on("click",function() {
  if(isIE8){
    alert('IE8');
    $(this).parent().attr('disabled', true);
  }else{
    alert('not IE8');
    $(this).attr('disabled', true);
  }
});

href属性もフレームワークが生成しているのでしょうが、もしそうでなければhref属性に複数メソッド記述する方法もあります。

<a id="atag" class="btn" href="javascript:myMethod();method()">CLICK ME</a>

ぱっと思いついたのはこんなところです。

methodの方で要素を無効化するのではどうでしょう。

一つにはmethod内で実行してほしいメソッド内容を書き換える。

```javascript
var nextMethod = undefined;
function method() {
  alert("click");
  if(nextMethod !== undefined){
    nextMethod();
    nextMethod = undefined;
  }
}

$("#atag").on("click",function() {
  var $el = $(this);
  nextMethod = function(){ $el.attr('disabled', true); };
});
```

または、methodにセレクタを渡してしまう

```javascript
function method(selectorToDisable) {
  alert("click");
  $(selectorToDisable).attr('disabled', true);
}
```

```html
<!-- html 側でセレクタを指定する必要がある -->
<a id="atag" class="btn" href="javascript:method('#atag')">CLICK ME</a>
```


※ IE8だとconsole無いのでalertにしてあります。


最初の例の場合はnextMethodを同時に複数で書き換えた場合に片方しか発火しなかったり、順序性が保証されているかを気にしなければなりません。
後の例では実行タイミングが変わるので気をつけないといけないかもしれません。

---

methodを常に呼ぶならclickイベントでmethodを呼ぶ手もあるかもしれません。

```javascript
var nextMethod = undefined;
function method($el) {
  alert("click");
  $el && $el.attr('disabled', true);
}

$("#atag").on("click",function() {
  method($(this));
});
```

作ろうとしているアプリの動作の都合もあるでしょうから、採用できるかはわかりませんが参考までに。

---

## 追記。

タグの方が自由に追加できるのなら、aタグの外にdivを作って親を無効化してしまうとIE8で同じ様な動作にはなりました。
しかしChromeではだめだったので、ie8判定は必要になってしまいますね。

```javascript
  <div>
  <a id="atag" class="btn" href="javascript:method()">CLICK ME</a>
  </div>
```

```javascript
function method() {
  alert("click");
}

$("#atag").on("click",function() {
  $(this).parent().attr('disabled', true);
});
```

あとは IE8の判定自体を簡素化するために、条件付きコメントを使ってしまう手も。
クリックイベントは上記のdivで囲うパターンでやっていますが他の方法にも使えると思います。
他のバージョンでIE8モードやIE8 エミュレートモードやエンタープライズモード(IE8相当だった気がする)だとどうなるかはわかりません。

```javascript
  <script>var isIE8=false;</script>
  <!--[if IE 8 ]><script>isIE8=true;</script><![endif]-->
```

```
$("#atag").on("click",function() {
  if(isIE8){
    alert('IE8');
    $(this).parent().attr('disabled', true);
  }else{
    alert('not IE8');
    $(this).attr('disabled', true);
  }
});
```

href属性もフレームワークが生成しているのでしょうが、もしそうでなければhref属性に複数メソッド記述する方法もあります。

```html
<a id="atag" class="btn" href="javascript:myMethod();method()">CLICK ME</a>
```

ぱっと思いついたのはこんなところです。

回答を投稿

methodの方で要素を無効化するのではどうでしょう。

一つにはmethod内で実行してほしいメソッド内容を書き換える。

var nextMethod = undefined;
function method() {
  alert("click");
  if(nextMethod !== undefined){
    nextMethod();
    nextMethod = undefined;
  }
}

$("#atag").on("click",function() {
  var $el = $(this);
  nextMethod = function(){ $el.attr('disabled', true); };
});

または、methodにセレクタを渡してしまう

function method(selectorToDisable) {
  alert("click");
  $(selectorToDisable).attr('disabled', true);
}
<!-- html 側でセレクタを指定する必要がある -->
<a id="atag" class="btn" href="javascript:method('#atag')">CLICK ME</a>

※ IE8だとconsole無いのでalertにしてあります。

最初の例の場合はnextMethodを同時に複数で書き換えた場合に片方しか発火しなかったり、順序性が保証されているかを気にしなければなりません。
後の例では実行タイミングが変わるので気をつけないといけないかもしれません。


methodを常に呼ぶならclickイベントでmethodを呼ぶ手もあるかもしれません。

var nextMethod = undefined;
function method($el) {
  alert("click");
  $el && $el.attr('disabled', true);
}

$("#atag").on("click",function() {
  method($(this));
});

作ろうとしているアプリの動作の都合もあるでしょうから、採用できるかはわかりませんが参考までに。

methodの方で要素を無効化するのではどうでしょう。

一つにはmethod内で実行してほしいメソッド内容を書き換える。

```javascript
var nextMethod = undefined;
function method() {
  alert("click");
  if(nextMethod !== undefined){
    nextMethod();
    nextMethod = undefined;
  }
}

$("#atag").on("click",function() {
  var $el = $(this);
  nextMethod = function(){ $el.attr('disabled', true); };
});
```

または、methodにセレクタを渡してしまう

```javascript
function method(selectorToDisable) {
  alert("click");
  $(selectorToDisable).attr('disabled', true);
}
```

```html
<!-- html 側でセレクタを指定する必要がある -->
<a id="atag" class="btn" href="javascript:method('#atag')">CLICK ME</a>
```


※ IE8だとconsole無いのでalertにしてあります。


最初の例の場合はnextMethodを同時に複数で書き換えた場合に片方しか発火しなかったり、順序性が保証されているかを気にしなければなりません。
後の例では実行タイミングが変わるので気をつけないといけないかもしれません。

---

methodを常に呼ぶならclickイベントでmethodを呼ぶ手もあるかもしれません。

```javascript
var nextMethod = undefined;
function method($el) {
  alert("click");
  $el && $el.attr('disabled', true);
}

$("#atag").on("click",function() {
  method($(this));
});
```

作ろうとしているアプリの動作の都合もあるでしょうから、採用できるかはわかりませんが参考までに。