[解決済み] .on('click') と .click() の違いについて
2022-03-17 19:53:21
質問
以下のコードに違いはありますか?
$('#whatever').on('click', function() {
/* your code here */
});
そして
$('#whatever').click(function() {
/* your code here */
});
解決方法は?
使い方の違いだと思います。
私は
.on
オーバー
.click
というのも、前者は
可
は、動的に追加される要素に対して、より少ないメモリと作業量を使用します。
次のようなhtmlを考えてみましょう。
<html>
<button id="add">Add new</button>
<div id="container">
<button class="alert">alert!</button>
</div>
</html>
で新しいボタンを追加します。
$("button#add").click(function() {
var html = "<button class='alert'>Alert!</button>";
$("button.alert:last").parent().append(html);
});
で、"Alert!"でアラートを表示させたい場合。そのためには、"click" または "on" のいずれかを使用することができます。
を使用する場合
click
$("button.alert").click(function() {
alert(1);
});
を使用すると セパレート ハンドラが作成されます。 すべての要素 にマッチします。つまり
- マッチングする要素が多い場合、同一のハンドラが多数作成されるため、メモリフットプリントが増加します。
- 例えば、上記のhtmlでは、新しく追加された "Alert!" ボタンは、ハンドラを再バインドしない限り機能しません。
を使用する場合
.on
$("div#container").on('click', 'button.alert', function() {
alert(1);
});
上記で シングル のハンドラです。 すべての要素 は、動的に作成されたものも含めて、セレクタにマッチします。
を使用するもう一つの理由は
.on
Adrien が以下のようにコメントしているように、もう一つの理由は
.on
は名前空間化されたイベントです。
でハンドラを追加した場合
.on("click", handler)
で削除するのが普通です。
.off("click", handler)
で、まさにそのハンドラを削除します。明らかに、これは関数への参照を持っている場合にのみ機能します。では、持っていない場合はどうするのでしょうか?名前空間を使うのです。
$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });
を経由してバインドを解除しています。
$("#element").off("click.someNamespace");
関連
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] .prop() vs .attr()
-
[解決済み] セレクタの子を取得する方法は?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] ドロップダウンのアイテムの選択値をjQueryで取得する
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
echarts-all.js:1 Uncaught TypeError: nullのプロパティ'getAttribute'を読み取ることができません。
-
[解決済み] jQueryでdata属性で要素を選択する
-
[解決済み] jQuery UIダイアログのクローズボタンを削除するには?
-
[解決済み] 既存の非順序型リストにリストアイテムを追加する方法
-
[解決済み] チェックボックスがチェックされた場合のjQuery
-
[解決済み] GoogleのCDNからjQuery UI CSSをダウンロードする
-
[解決済み] jQueryでフォームフィールドをクリアする
-
[解決済み] jQuery removeClass ワイルドカード
-
[解決済み] jQueryの検証:デフォルトのエラーメッセージを変更する
-
[解決済み] jQueryで多段式フォームをリセットする