การได้มาซึ่งองค์ประกอบเป้าหมายเมื่อเหตุการณ์แพร่กระจาย

สมมติว่าเรามีสององค์ประกอบ: div และย่อหน้า p ที่อยู่ภายใน div นั้น:

html<div>
  <p></p>
</div>

มาดึงลิงก์ไปยัง div ของเราเก็บไว้ในตัวแปร:

javascriptlet div = document.querySelector('div');

เพิ่มสไตล์บางอย่างให้กับแท็กของเรา:

cssdiv {
  padding: 20px;
  border: 1px solid red;
}

p {
  width: 200px;
  height: 200px;
  border: 1px solid green;
}

สมมติว่าตอนนี้มีตัวจัดการเหตุการณ์คลิกติดอยู่บน div:

javascriptdiv.addEventListener('click', function() {
  console.log('click');
});

เนื่องจาก div ของเรามี padding ดังนั้นเมื่อเราคลิกที่ div เราอาจจะคลิก ที่ย่อหน้า หรือเราอาจจะคลิกในตำแหน่งที่ไม่มี ย่อหน้านั้น นั่นคือคลิกที่ตัว div โดยตรง

ในขณะที่ตัวจัดการเหตุการณ์คลิก this จะชี้ไปยังองค์ประกอบที่ตัวจัดการนั้นถูกติดตั้งเสมอ ในกรณีของเรา นี่คือ div ของเรา:

javascriptdiv.addEventListener('click', function() {
  console.log(this); // div
});

อย่างไรก็ตาม เราสามารถได้มาเฉพาะแท็ก ที่เหตุการณ์เกิดขึ้นจริงๆ ได้ สำหรับสิ่งนี้เรา สามารถดูว่าอะไรอยู่ใน event.target:

javascriptdiv.addEventListener('click', function(event) {
  console.log(event.target); // อาจเป็น div หรือย่อหน้า
});

สามารถแยกความแตกต่างระหว่างสองกรณีนี้ได้โดยใช้ เงื่อนไข:

javascriptlet div = document.querySelector('div');

div.addEventListener('click', function(event) {
  if (event.target.tagName === 'DIV') {
    console.log('คลิกที่ div โดยตรง');
  }
  if (event.target.tagName === 'P') {
    console.log('คลิกที่ย่อหน้าโดยตรง');
  }
});

สามารถใช้ matches แทน tagName ได้:

javascriptlet div = document.querySelector('div');

div.addEventListener('click', function(event) {
  if (event.target.matches('div')) {
    console.log('คลิกที่ div โดยตรง');
  }
  if (event.target.matches('p')) {
    console.log('คลิกที่ย่อหน้าโดยตรง');
  }
});
Задание 1

มีองค์ประกอบดังต่อไปนี้:

html<div>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
  </ul>
</div>
cssdiv, ul, li {
  padding: 20px;
}

div {
  border: 1px solid red;
}
ul {
  border: 1px solid orange;
}
li {
  border: 1px solid green;
}

ติดตั้งตัวจัดการเหตุการณ์คลิกบน div ใน ตัวจัดการนี้ จงพิจารณาว่าเหตุการณ์เกิดขึ้นในแท็กใด

Задание 2

ปรับเปลี่ยนงานก่อนหน้า จงทำให้ เมื่อคลิกที่ li จะมีเครื่องหมายอัศเจรีย์เพิ่มที่ท้าย และเมื่อคลิก ที่ ul จะแสดงข้อมูลเกี่ยวกับสิ่งนี้ในคอนโซล