これは悪い習慣だと知っています。可能な限り、このようなコードは記述しないでください。
もちろん、インラインJavascriptの巧妙なスニペットで問題にすばやく対処できる状況では、常に自分自身を見つけます。
次のようなものが書かれたときに何が起こるか(そして潜在的な落とし穴)を完全に理解するために、このクエリを追求しています。
<a href="#" onclick="alert('Hi')">Click Me</a>
私が知る限り、これは機能的には同じです
<script type="text/javascript">
$(function(){ // I use jQuery in this example
document.getElementById('click_me').onclick =
function () { alert('Hi'); };
});
</script>
<a href="#" id="click_me">Click Me</a>
これから推定すると、属性に割り当てられた文字列onclickは、要素のクリックハンドラーに割り当てられた無名関数内に挿入されているようです。これは本当ですか?
私はこのようなことを始めているので:
<a href="#" onclick="$(this).next().fadeIn(); return false;">Display my next sibling</a> <!-- Return false in handler so as not to scroll to top of page! -->
うまくいきました。しかし、これがどれだけのハックなのかはわかりません。から返されている明らかな関数がないため、疑わしく見えます!
あなたは尋ねるかもしれません、なぜあなたはこれをしているのですか、スティーブ?インラインJSは悪い習慣です!
正直なところ、ページの1つのセクションを変更するためだけにコードの3つの異なるセクションを編集するのにうんざりしています。特に、プロトタイプを作成して、それがまったく機能するかどうかを確認する場合は特にそうです。これは非常に簡単で、このHTML要素に特に関連するコードを要素内で定義することも理にかなっています。2分後にこれがひどい、ひどい考えだと判断したとき、div全体(または何でも) )そして、私はページの残りの部分にぶら下がっている不思議なJSとCSSの束がたくさんないので、レンダリングが少し遅くなります。これは参照の局所性の概念に似ていますが、キャッシュミスではなく、バグとコードの膨張を調べています。
#click_meDOMreadyイベントにフックするか、ノードの後にスクリプトを配置する必要があります。
document.getElementById("click_me").onclick;。または警告します。関数内にあることがわかります。