JavaScriptノート——標準イベントの対象とIEイベントの対象
3994 ワード
標準的なイベントバインディング関数は
イベントの取得先
イベントの目的は、現在トリガされているイベントの要素です.
以下のHTMLがあります.
以下のHTMLがあります.
下記のHTMLがあります
読んでいただいてありがとうございます.足りないところがあれば指摘してください.
参照
JavaScript高級プログラム設計(第3版)
この記事は私の個人ブログと同期します.http://blog.acwong.org/2014/12/30/standard-event-object-and-IE-event-object/
addEventListener
関数であり、IEブラウザ(IE 9以下)はattachEvent
である.これらの2つの関数のうちのイベントハンドラ関数はいずれも一つのevent
パラメータに入ることができます.つまり、私たちが言っているイベントオブジェクトです.ここでは両者の違いをまとめます.イベントの取得先
イベントの目的は、現在トリガされているイベントの要素です.
以下のHTMLがあります.
標準イベントオブジェクトは、event
のtarget
属性を用いてイベントターゲットを取得する.var btn = document.getElementById('myButton');
btn.addEventListener("click", function(event) {
alert(event.target.id); // myButton
});
IEイベントオブジェクトは、event
のsrcElement
属性を用いてイベントターゲットを取得する.var btn = document.getElementById("myButton");
btn.attachEvent("onclick", function(event) {
alert(event.srcElement.id); // myButton
});
また、標準的なイベントオブジェクトは、常にcurrentTarget
と同じであるthis
属性があり、target
属性は、イベントトリガの特定のターゲットを指す.document.body.addEventListener("click", function (event) {
alert(event.currentTarget.id); // myBody
alert(event.target.id); // myButton
alert(this.id); // myBody
});
イベントのデフォルトをキャンセル以下のHTMLがあります.
acwong blog
標準イベントオブジェクトは、event
のpreventDefault()
方法を使用してイベントのデフォルト挙動をキャンセルする.var myLink = document.getElementById('myLink');
myLink.addEventListener("click",function(event) {
alert("haha"); // haha
event.preventDefault(); //
});
IEイベントオブジェクトは、event
のreturnValue
属性を使用してイベントのデフォルト挙動をキャンセルし、この属性のデフォルト値はtrue
に設定されているので、イベントのデフォルト挙動をキャンセルすることができる.var myLink = document.getElementById('myLink');
myLink.attaxchEvent("onclick",function(event) {
alert("haha"); // haha
event.returnValue = false; //
});
事件の泡が立つことを禁止する下記のHTMLがあります
標準的なイベントオブジェクトは、false
のevent
方法を使用して、イベントの発泡を禁止する.var btn = document.getElementById("myButton");
btn.addEventListener("click", function(event) {
alert(this.id); // myButton
event.stopPropagation(); //
});
document.body.addEventListener("click",function(event) {
alert(this.id); //
});
IEイベントオブジェクトは、stopPropagation()
のevent
属性を使用して、デフォルトはcancelBubble
であり、false
に設定すると、イベントの発泡を禁止することができる.var btn = document.getElementById("myButton");
btn.attachEvent("onclick", function(event) {
alert("haha"); // haha
event.cancelBubble = true; //
});
document.body.attachEvent("onclick",function(event) {
alert("hehe"); //
});
IEイベントハンドリング関数のtrue
最後に、もう一つのイベントオブジェクトに関係のない小さな点が必要であり、IEイベント処理関数におけるthis
の値は、バインディングされた要素に等しくないが、this
オブジェクトに等しい.var btn = document.getElementById("myButton");
btn.attachEvent("onclick", function(event) {
alert(this === window); // true
alert(this.id) // undefined
});
標準的なイベントバインディングでは、window
の値は、バインディングされた要素に等しい.var btn = document.getElementById("myButton");
btn.addEventListener("click", function(event) {
alert(this === btn); // true
alert(this.id); // myButton
alert(this === event.currentTarget); // true
});
最後に、明けましておめでとうございます.読んでいただいてありがとうございます.足りないところがあれば指摘してください.
参照
JavaScript高級プログラム設計(第3版)
この記事は私の個人ブログと同期します.http://blog.acwong.org/2014/12/30/standard-event-object-and-IE-event-object/