[解決済み] インラインJavascript(HTML内)はどのように機能するのですか?
質問
これは悪い習慣であることは分かっています。可能な限りこのようなコードを書かないようにしてください。
もちろん、インライン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! -->
というのが動作します。しかし、これがどの程度のハックなのかはわかりません。なぜなら、明らかに返される関数がないからです。
なぜこんなことをするのかと聞かれるかもしれませんね、Steve。インラインJSは悪い習慣だ!
正直に言うと、私はページの 1 つのセクションを修正するために 3 つの異なるセクションのコードを編集することに疲れています。この HTML 要素に特に関連するコードを定義する方がはるかに簡単で、時には理にかなっています。 の右側に 要素の中で定義することは、とても簡単で、時には理にかなっています。2 分後にこれはひどい、ひどい考えだと思ったときには、div (またはその他) 全体を削除すれば、ページの残りの部分に謎の JS や CSS の残骸がたむろして、レンダリング速度がわずかに低下するようなことはありません。これは参照の局所性という概念に似ていますが、キャッシュミスの代わりに、バグとコードの肥大化に注目しています。
どのように解決するのですか?
ほぼ正しいのですが、"C "の部分を考慮していません。
this
の値がインライン コードに供給されることを考慮していません。
<a href="#" onclick="alert(this)">Click Me</a>
の方が実は近い。
<a href="#" id="click_me">Click Me</a>
<script type="text/javascript">
document.getElementById('click_me').addEventListener("click", function(event) {
(function(event) {
alert(this);
}).call(document.getElementById('click_me'), event);
});
</script>
インラインイベントハンドラセット
this
をイベントのターゲットに等しくします。
また、インラインスクリプトで無名関数を使用することもできます。
<a href="#" onclick="(function(){alert(this);})()">Click Me</a>
関連
-
JavaScriptのクロージャの説明
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】なぜHTMLは "chucknorris "を色と見なすのか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
jsを使った簡単な照明スイッチのコード
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
vue ディレクティブ v-html と v-text
-
vueが定義するプライベートフィルタと基本的な使い方
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】リクエストに失敗していないのに、「TypeError: failed to fetch」が表示される。
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
[解決済み] alert("Hi!") と function(){alert("Hi!")} の違い。重複] [重複] [重複] [重複] [重複] [重複