JavaScript циклдеги окуя иштетүүчүлөрдү ажыратуу
Эми бизде бир элемент эмес, бир нече элемент бар дейли. Мисалы, бир нече абзац:
<p>text1</p>
<p>text2</p>
<p>text3</p>
Келгиле, ушул абзацтардын ар бирине чыкылдатуу
окуясынын иштетүүчүсү катары func функциясын
байлап коёлу:
let elems = document.querySelectorAll('p');
for (let elem of elems) {
elem.addEventListener('click', func);
}
function func() {
console.log(this.textContent);
}
Эми келгиле, кодду өзгөртөлү, ар бир абзац ага жасалган биринчи басканга гана жооп берсин. Бул үчүн, абзацты чыкылдатканда, ага байланган иштетүүчүнү ажыратып салабыз. Бул ажыратуу так ошол абзацтан гана болот, калгандарына тийбестен.
Билгендей, окуя болгон элементти иштетүүчү
функция ичинде this аркылуу алууга болот.
Демек, иштетүүчүнү thisтен ажыратууну
аткаруу керек, мындайча:
let elems = document.querySelectorAll('p');
for (let elem of elems) {
elem.addEventListener('click', func);
}
function func() {
console.log(this.textContent);
this.removeEventListener('click', func); // иштетүүчүнү ажыратабыз
}
Абзацтар берилген. Ар кайсы абзацты чыкылдатканда, анын аягына үн белгисин кошуңуз. Бул кошуу биринчи чыкылдатууда гана болушун кылыңыз.