イベント依頼(代理)
15317 ワード
定義(複数の異なる定義)一般的には、イベント依頼は、要素応答イベント(click、keydown)の関数を別の要素に委託することである. 簡単に言えば、イベント依頼はJavaScriptイベントの泡が発生する特性を利用して、内部要素のイベントを外部要素に委託(バインディング)して処理することである. 一般的には、イベント依頼は、1つまたは複数の要素のイベントを、親層要素またはより外側の要素に委託(結合)し、本当にバインディングされたイベントは、外層要素であり、イベントがバインディングを必要とする要素に応答すると、イベント発泡機構を通じて、その外層要素のバインディングイベントをトリガする.そして、外層要素の上で関数を実行します. 1、一般的な書き方(イベント依頼を使用しない)
上のコードから見ることができます.forループで対応するliにクリックイベントを追加します.一つずつ追加すると、dom操作がもう一回できます.ボタンを押して、全部で5回クリックします.新しいli元素を追加する時に、新しいli元素にクリックイベントを追加します.これはきっと煩わしいです.そしてdom操作の回数は最適化されていません.明らかにページのli要素が多い時、性能は影響されます.
2、イベント依頼の書き方
上のコードと普通の書き方を比較して、明らかにイベント依頼の書き方をより簡潔にして、コード量を減らすだけではなく、dom操作回数を減らして、性能の最適化を実現します.
<ul>
<li>li 1 li>
<li>li 2 li>
<li>li 3 li>
<li>li 4 li>
ul>
<button id="btn"> button>
//
let oUl = document.getElementsByTagName("ul")[0];
let oLi = document.getElementsByTagName("li");
//
for (let i = 0; i < oLi.length; i++) {
oLi[i].onclick = function() {
console.log(oLi[i].innerText);
};
};
// id
let btn = document.getElementById("btn");
//
btn.onclick = function() {
// li
let aLi = document.createElement("li");
// li
aLi.innerHTML = `li ${
oLi.length+1} `;
//
aLi.onclick = function() {
console.log(aLi.innerText);
};
// li
oUl.appendChild(aLi);
};
締め括りをつける上のコードから見ることができます.forループで対応するliにクリックイベントを追加します.一つずつ追加すると、dom操作がもう一回できます.ボタンを押して、全部で5回クリックします.新しいli元素を追加する時に、新しいli元素にクリックイベントを追加します.これはきっと煩わしいです.そしてdom操作の回数は最適化されていません.明らかにページのli要素が多い時、性能は影響されます.
2、イベント依頼の書き方
<ul>
<li>li 1 li>
<li>li 2 li>
<li>li 3 li>
<li>li 4 li>
ul>
<button id="btn"> button>
//
let oUl = document.getElementsByTagName("ul")[0];
let oLi = document.getElementsByTagName("li");
// ul
oUl.onclick = function(ev) {
// ev
ev = ev || window.event;
// ev target
// :
let target = ev.target || ev.srcElement;
//
// target.nodeName.toLowerCase()
//
if (target.nodeName.toLowerCase() == "li") {
console.log(target.innerText);
};
//
console.log(target.innerText);
};
// id
let btn = document.getElementById("btn");
//
btn.onclick = function(ev) {
// li
let aLi = document.createElement("li");
// li
aLi.innerHTML = `li ${
oLi.length+1} `;
// li ul
oUl.appendChild(aLi);
};
締め括りをつける上のコードと普通の書き方を比較して、明らかにイベント依頼の書き方をより簡潔にして、コード量を減らすだけではなく、dom操作回数を減らして、性能の最適化を実現します.