首页 > 解决方案 > 在 div 上添加 OnClick 事件

问题描述

我正在尝试添加一个 div 中的按钮事件。

HTML:

<template id="modele-panier" type="text/AhuntsicModele">
  <div class="dialog-item">
    <table>
      <tr>
        <td>
          <img src={cheminImage} alt="">
        </td>
        <td>
          <h2>Article : {libelleProduit}</h2>
          <p>Qte : {qteProduit} prix : {prixProduit}$</p>
        </td>  
        <div class="supp">
          <td>
            <a href="#" id="{libelleProduit}">Supprimer </a>
          </td>
        </div>
      </tr>
    </table>
  </div>
</template>

控制器.js

document.addEventListener('click', function (e) {
  if (e.target && e.target.matches('button')) {
    controleur.ajouterPanier(e.target.id);
  } else if (e.target && e.target.matches('#main')) {
    controleur.loadCatalogue();
  } else if (e.target && e.target.matches('#getBMW')) {
    controleur.loadBMW();
  } else if (e.target && e.target.matches('#getAudi')) {
    controleur.loadAudi();
  } else if (e.target && e.target.matches('#getMercedes')) {
    controleur.loadMercedes();
  } else if (e.target && e.target.matches('#icone_compte')) {
    controleur.creationCompte();
  }  // THIS EVENT RIGHT HERE :
  else if (event.target.matches('supp')) { 
    alert(e.target.id)
    controleur.supprimerItem();
  }
});

我无法将事件添加到 div 类 supp 所有其他都工作正常,因为我没有为其他类使用 div 类。谢谢

标签: javascripthtmleventseventhandler

解决方案


如果我理解正确,您希望您的控制器逻辑能够检测和处理带有supp类的元素上的点击事件。

为了通过对代码的最小更改来实现这一点,您可以通过classList界面执行以下操作:

document.addEventListener('click', function(e) {
  
  /* Existing code removed for bervity */
  
  /* Use classList.contains method to check if target element has supp class */
  if (event.target.classList.contains('supp')) {
    alert(e.target.id)
    controleur.supprimerItem();
  }

});
<table>
  <tr>
    <td><img src="https://via.placeholder.com/150" alt=""></td>
    <td>
      <h2>Article : {libelleProduit}</h2>
      <p>Qte : {qteProduit} prix : {prixProduit}$</p>
    </td>
    <div class="supp">
      <td><a href="#" id="foo">Supprimer </a></td>
    </div>
  </tr>

</table>

我假设点击处理程序的目标是动态添加到 DOM 的元素(这就是为什么你在点击处理程序内部运行 if/else if 检查的原因?) - 这种逻辑的另一种方法可能会给你一个更多的灵活性是通过类似 CSS 的选择器和querySelector()方法查询 DOM:

document.addEventListener('click', function(e) {
  
  /* Existing code removed for bervity */
  
  /* Query document during click for first .supp relative to table */
  const suppDiv = document.querySelector("table .supp")
  if(suppDiv) {
    alert('clicked .supp')
  }

});
<table>
  <tr>
    <td><img src="https://via.placeholder.com/150" alt=""></td>
    <td>
      <h2>Article : {libelleProduit}</h2>
      <p>Qte : {qteProduit} prix : {prixProduit}$</p>
    </td>
    <div class="supp">
      <td><a href="#" id="foo">Supprimer </a></td>
    </div>
  </tr>

</table>

希望有帮助!


推荐阅读