インラインonclick
ハンドラを使用しています。あなたの HTML:
onclick="ToggleClass();"
次のように解釈されます。
element.onclick = function(event) {
//`this` is available inside the onclick method
ToggleClass(); //but it is not passed to called functions automatically
}
関数を呼び出しているだけなので、この実行this
内で参照は設定されません。ToggleClass
「設定されていない」とは、ES の側面を意味します。未定義の関数コードを入力this
すると、参照がオブジェクトthis
を指すか、厳密モードの場合になります。window
undefined
this
関数実行コンテキストの参照を設定する 1 つの方法は、 Function.call
orを使用することFunction.apply
です。
onclick="ToggleClass.call(this, event);"
this
キーワードの詳細については、こちらをご覧ください。
*event
コードでは必要ありませんが、イベント ハンドラーは通常、イベント オブジェクトを受け取ることを想定しているため、とにかく渡します。
ただし、あなたはすでに jQuery を使用しています。jQuery は、this
イベント ハンドラー内で参照を設定し、イベント オブジェクトをラップして、そのメソッドをクロスブラウザーにします。したがって、要素に JS フックを追加し、jQuery を介してリスナーをアタッチするだけです。
<a href="#" class="js-toggleClass">Toggle class</a>
<script>
$('.js-toggleClass').click(function(e) {
e.preventDefault();
$(this).toggleClass('bold');
});
</script>
デモ
JavaScript は属性内に属さないためhref="javascript:void(0)"
、jQuery Event オブジェクトのメソッドに置き換え、jQueryメソッドを使用してロジックも簡素化しました。preventDefault()
href
.toggleClass()
この利点は、構造 (HTML) と動作 (JS) が分離されているため、コードがより整理され、モジュール化された状態に保たれることです。