Reputation: 21
I want to select a button from a list item that I created using the previous function in the script. It is showing its class name when I inspect the elements but when I console the element itself it is undefined. How can I select this element so as to attach an event listener to it? Thanks for your help!
var journalListEl = document.querySelector("#journal-list")
var journalTextInputEl = document.querySelector("#journal-text");
var journalEntryImageURLEl = document.querySelector("#journal-image-url")
var journalImage = document.querySelector("#journal-image")
var journalEntrySubmitButton = document.querySelector("#journal-entry-submit-button")
journalEntryImageURLEl.addEventListener("input", displayJournalPhoto)
function displayJournalPhoto() {
var journalEntryImageURL = journalEntryImageURLEl.value
journalImage.setAttribute("src", journalEntryImageURL)
}
journalEntrySubmitButton.addEventListener("click", handleSubmitJournalEntry)
function handleSubmitJournalEntry() {
event.preventDefault()
var journalEntryListItemEl = document.createElement("li")
var journalEntryTextEl = document.createElement("p")
var journalEntryImageEl = document.createElement("img")
var journalEntryUpdateButton = document.createElement("button")
var journalEntryDeleteButton = document.createElement("button")
journalEntryUpdateButton.textContent = "Edit";
journalEntryDeleteButton.textContent = "Delete";
journalEntryListItemEl.classList.add("journal-list-entry")
journalEntryUpdateButton.classList.add("edit-journal-entry")
journalEntryDeleteButton.classList.add("delete-journal-entry")
journalEntryTextEl.innerHTML = journalTextInputEl.value
var journalEntryImageURL = journalEntryImageURLEl.value
journalEntryImageEl.setAttribute("src", journalEntryImageURL)
var newJournalEntryObj = {
journalText: journalEntryTextEl,
journalImage: journalEntryImageEl,
journalImageURL: journalEntryImageURL
}
journalEntryListItemEl.appendChild(newJournalEntryObj.journalText)
journalEntryListItemEl.appendChild(newJournalEntryObj.journalImage)
journalEntryListItemEl.appendChild(journalEntryUpdateButton)
journalEntryListItemEl.appendChild(journalEntryDeleteButton)
journalListEl.appendChild(journalEntryListItemEl)
}
var updateJournalEntryButton = document.querySelector(".journal-list-entry")
updateJournalEntryButton.addEventListener("click", handleUpdateJournalEntry)
function handleUpdateJournalEntry() {
alert("updated journal entry!")
}
Upvotes: 1
Views: 143
Reputation: 89462
Use event delegation on the nearest static ancestor.
For example:
journalListEl.addEventListener('click', e => {
if (e.target.matches('.journal-list-entry')) {
// handle update journal entry
}
});
Upvotes: 1