javascript巡回&イベントエージェント(依頼)
1141 ワード
需要:各liにクリックイベントを追加する必要があれば.
一、従来の実現方法:各liを遍歴し、それぞれのliに単独でイベントをクリックする.
2、新たにliを追加したら、例えばミニブログを出す時、先ほど送ったミニブログは、ちょうど送ったミニブログが事件を持ってくることができますか?第2点に対して:答えは新しく作成された要素は前遍歴のイベントを持たないので、要素を作る前にすでにliを遍歴しました.すでに存在したliにイベントを加えました.
二、解決案:
上記の二つの欠点を解決するために、私達は事件代理を使って、事件依頼の方式で実現します.事件の依頼をよりよく理解するために、まず事件に関する知識を知るべきです.ここでは、事件が起こったとは詳しくは言いません.イベントの泡立ちや捕獲の特性により、ulにイベントをクリックすることができます.
一、従来の実現方法:各liを遍歴し、それぞれのliに単独でイベントをクリックする.
- 001
- 002
- 003
var oUl = document.getElementById('ul1');
var aLi = oUl.getElementsByTagName('li');
for (var i = 0, i = aLi.length; i++) {
aLi.onclick = fn;
}
短所:1、もし現在のページに複数のliがあれば、例えばポータルニュースサイトのニュースリスト.遍歴が必要なら、性能に影響があります.2、新たにliを追加したら、例えばミニブログを出す時、先ほど送ったミニブログは、ちょうど送ったミニブログが事件を持ってくることができますか?第2点に対して:答えは新しく作成された要素は前遍歴のイベントを持たないので、要素を作る前にすでにliを遍歴しました.すでに存在したliにイベントを加えました.
二、解決案:
上記の二つの欠点を解決するために、私達は事件代理を使って、事件依頼の方式で実現します.事件の依頼をよりよく理解するために、まず事件に関する知識を知るべきです.ここでは、事件が起こったとは詳しくは言いません.イベントの泡立ちや捕獲の特性により、ulにイベントをクリックすることができます.
var oUl = document.getElementById('ul1');
oUl.onclick = function(ev) {
var ev = ev || event;
//
var target = ev.target || ev.srcElement;
// li
if (target.nodeName.toLowerCase() == 'li') {
//li
fn();
}
}
まとめ:evオブジェクトには一定の互換性がありますが、ここでの互換性の処理は難しくありません.実際には、イベント依頼の本質は、複数の要素の親レベルにイベントを追加し、泡を利用したり、次のサブ要素を捕獲し、単独でイベントをバインドします.