例えば:jQueryはイベントハンドラの作成時にターゲット要素を変更しますか?
$("myElement").click(function(){
alert("Clicked!");
};
が#myElement
が変更されている、それはonclick
属性セットだ、またはjQueryのはただのリスナーを設定したのですか? click()
関数は任意のDOM属性ない変更を行い.click();
例えば:jQueryはイベントハンドラの作成時にターゲット要素を変更しますか?
$("myElement").click(function(){
alert("Clicked!");
};
が#myElement
が変更されている、それはonclick
属性セットだ、またはjQueryのはただのリスナーを設定したのですか? click()
関数は任意のDOM属性ない変更を行い.click();
使用した場合
jQueryのは、リスナーを設定します。
特定のjQuery要素のリスナーを追加します。
.change(), .keyup(), ...
などと同じです。
要素を変更しません。
jQueryの() - も$()のように書くことができる - 提供セレクタに一致する要素にDOM を検索し、これらの要素を参照する新しい jQueryオブジェクトを作成
$("myElement").click(...) calls: $("myElement").bind('click', ...)
which then calls: jQuery.event.add(...)
which ultimately does either elem.addEventListener(...) or elem.attachEvent(...)
だから、我々は我々がaddEventので、期待通りである(onclick
属性を設定されていないことを決定的に言うことができます:jQueryの1.6.2のソースを見てみますリスナーはより拡張性があります)。
しかし、深い内部の.click()関数をステップ実行すると、属性はDOMオブジェクトに追加されます。です。これはjQueryのデータ関数に関連しており、event.add(...)
から呼び出されるjQueryのデータ関数のこのコード部分に関連しています。 jQueryがDOM参照を保持せずに(メモリリークを引き起こす可能性のある)どのオブジェクトであるかを追跡するために使用するGUID識別子のようです。その属性を追加するコードはここにある:
if (!id) {
// Only DOM nodes need a new unique ID for each element since their data
// ends up in the global cache
if (isNode) {
elem[ jQuery.expando ] = id = ++jQuery.uuid;
} else {
id = jQuery.expando;
}
}
だから、結論では、jQueryのは.onclick
属性は触れていないが、最初のイベントハンドラを設定する際には、DOMオブジェクト上の少なくとも1つの他の属性を設定しています。
これは私が考えたものです。グッドオールjQuery。 – mattsven
ちょっとしたこととして、$( 'yourelement')。data()を実行すると、特定の要素に関連付けられたイベントを見ることができます。イベントの下では、それが聞いているイベントを見ることができます。 –