คุณสามารถกำหนดเป้าหมายองค์ประกอบหลักขององค์ประกอบโดยใช้ event.target ได้หรือไม่


87

ฉันกำลังพยายามเปลี่ยน innerHTML ของหน้าให้กลายเป็น innerHTML ขององค์ประกอบที่ฉันคลิกปัญหาเดียวคือฉันต้องการให้มันใช้องค์ประกอบทั้งหมดเช่น:

<section class="homeItem" data-detail="{"ID":"8","Name":"MacBook Air","Description":"2015 MacBook A…"20","Price":"899","Photo":"Images/Products/macbookAir.png"}"></section>

ในขณะที่รหัสที่ฉันเขียนด้วยจาวาสคริปต์:

function selectedProduct(event){
  target = event.target;
  element = document.getElementById("test");
  element.innerHTML = target.innerHTML;
}

จะกำหนดเป้าหมายองค์ประกอบเฉพาะที่ฉันคลิก

สิ่งที่ฉันต้องการบรรลุคือเมื่อฉันคลิกที่ใดก็ได้ใน<section>องค์ประกอบนั้นจะใช้ innerHTML ขององค์ประกอบทั้งหมดแทนที่จะเป็นองค์ประกอบเฉพาะที่ฉันคลิก

ฉันคิดว่ามันเป็นสิ่งที่เกี่ยวข้องกับการเลือกองค์ประกอบหลักขององค์ประกอบที่ถูกคลิก แต่ฉันไม่แน่ใจและไม่พบสิ่งใดทางออนไลน์

ถ้าเป็นไปได้ฉันอยากอยู่ห่างจาก JQuery

คำตอบ:


163

ฉันคิดว่าสิ่งที่คุณต้องการคือการใช้ไฟล์event.currentTarget. สิ่งนี้จะมีองค์ประกอบที่มีตัวฟังเหตุการณ์จริงๆ ดังนั้นหากทั้งหมด<section>มี eventlistener event.targetจะเป็นองค์ประกอบที่คลิกสิ่ง<section>นั้นจะอยู่ในevent.currentTargetจะอยู่ใน

มิฉะนั้นparentNodeอาจเป็นสิ่งที่คุณกำลังมองหา

ลิงก์ไปยัง
ลิงก์ currentTarget ไปยัง parentNode


5
สิ่งนี้ได้ทำในสิ่งที่ฉันต้องการแล้วขอบคุณ! ฉันจะยอมรับคำตอบเมื่อหมดเวลา
อดัม

2
บันทึกฉันวัน!, event.target เป็นแท็กที่เล็กที่สุดที่เมาส์ event.currentTarget เป็นแท็กที่มีเหตุการณ์ทริกเกอร์
datdinhquoc

1
ดูเหมือนจะใช้งานง่าย ฉันคิดว่าcurrentTargetควรเป็นตัวแทนขององค์ประกอบที่คลิกในขณะที่targetควรเป็นสิ่งที่เหตุการณ์นั้นตั้งไว้
Randall Coding

นั่นคือสิ่งที่ฉันมองหาขอบคุณก่อน แต่ฉันมีคำถามหนึ่งข้อเมื่อฉันบันทึกวัตถุเหตุการณ์ในฟังก์ชันของฉัน currentTarget เป็นโมฆะ แต่ฉันยังสามารถรับ id จากแอตทริบิวต์ชุดข้อมูลของฉันได้คือเหตุการณ์ที่บันทึกไว้ ยังคงเป็น e.target เดิมหรือไม่
a_m_dev

53

ในการใช้พาเรนต์ขององค์ประกอบให้ใช้parentElement:

function selectedProduct(event){
  var target = event.target;
  var parent = target.parentElement;//parent of "target"
}

2
ขณะที่คำถามคำตอบนี้ OP ของผมคิดว่าปัญหาของ OP currentTargetควรจะแก้ไขได้ด้วย
donnywals

สิ่งนี้ทำให้ฉันมีองค์ประกอบหลักระดับบนสุดซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหาขอบคุณอย่างไรก็ตามฉันจะเก็บสิ่งนี้ไว้ในการเข้ารหัสในอนาคตของฉัน
อดัม

10
function getParent(event)
{
   return event.target.parentNode;
}

ตัวอย่าง: 1. document.body.addEventListener("click", getParent, false);ส่งคืนองค์ประกอบหลักขององค์ประกอบปัจจุบันที่คุณคลิก

  1. หากคุณต้องการใช้ภายในฟังก์ชันใด ๆ ให้ส่งผ่านเหตุการณ์ของคุณและเรียกใช้ฟังก์ชันดังนี้: function yourFunction(event){ var parentElement = getParent(event); }



-1
var _RemoveBtn = document.getElementsByClassName("remove");
for(var i=0 ;  i<_RemoveBtn.length ; i++){
    _RemoveBtn[i].addEventListener('click',sample,false);
}
function sample(event){
    console.log(event.currentTarget.parentNode);    
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.