簡體   English   中英

將 eventListener 附加到單擊另一個按鈕時將出現的按鈕?

[英]attaching an eventListener to a button that will appear when clicking another button?

所以基本上,我正在處理一個待辦事項列表,您必須使用“輸入”按鈕輸入一個任務,然后該任務會出現在 UI 中,並帶有一個名為“刪除”的按鈕。

我無法將事件偵聽器附加到刪除按鈕。

HTML:

<div id="container">

    <input type="checkbox" id="checkbox" name="task1"  >
    <label for="task1" id="tasks">running 10 mile</label><br>
    <button class="delete">Delete</button>
    
</div>

這是默認的。

'''javascript

    tasks = []

    btnEnter.addEventListener('click',function(e){
    e.preventDefault();
    
    if (labelInput.value !== ''){
        tasks.push(labelInput.value)//if not '' push to the tasks arr

    // to display the last element of the tasks array:
    tasks.slice(-1).map((task , i)=>{
    
    const html =
    `<div id="container">
    <input type="checkbox" id="checkbox" name="task${i}"  >
    <label for="task${i}" id="tasks">${task}</label><br>
    <button class="delete">Delete</button>
    </div>`;
    inputDiv.insertAdjacentHTML('afterend',html)

    // to clear the input text;
    labelInput.value ='';   
})

    }else {alert('enter a valid task')};
    
})

在每個刪除按鈕上附加事件偵聽器的問題是,當頁面首次加載時,它們在 DOM 中不存在。 我們需要將事件偵聽器附加到任務項的祖先上。 我們可以使用div#container作為祖先並將每個新任務插入其中。

  const container = document.querySelector('div#container')

  const html = `
    <div>
      <input type="checkbox" id="task${i}" name="task${i}">
      <label for="task${i}">${task}</label><br>
      <button class="delete">Delete</button>
    </div>
  `
  container.insertAdjacentHTML('afterbegin', html)

我們可以在容器上附加一個單擊監聽器,它將事件委托給任何將被單擊的新刪除按鈕。

  container.addEventListener('click', e => {
    document.querySelectorAll('button.delete').forEach(button => {
      if (button.contains(e.target)) {
        // ...delete the task item
      }
    })
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM