在 div 上添加 OnClick 事件
add OnClick event on a div
我正在尝试添加 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>
Controler.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 class 假设所有其他都工作正常,因为我没有为其他事件使用 div class .
谢谢
如果我没理解错的话,您希望您的控制器逻辑检测并处理带有 supp
class 的元素上的点击事件。
要通过对代码进行最少的更改来实现这一点,您可以通过 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 的元素(这就是为什么如果检查单击处理程序?) - 另一种可能会给你更多灵活性的逻辑方法是通过类似 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>
希望对您有所帮助!
你可以使用这个
const div = document.getElementsByClassName("supp");
else if (div[0]!=undefined) {
alert(e.target.id)
controleur.supprimerItem();
}
希望对您有所帮助
您正在尝试使用函数参数 event
,您的函数中并未调用该参数。您在函数中将参数命名为 e
。
此外,.matches()
checks if an element would normally be targeted based on a selector string. Which is what you would normally use to target elements with document.querySelector()
。所以supp
应该改为.supp
.
因此,当您将代码更改为:
时,您的代码应该可以正常工作
} else if (e.target.matches('.supp')) {
controleur.supprimerItem();
}
甚至:
} else if (e.target && e.target.matches('.supp')) {
controleur.supprimerItem();
}
就像您的其他 if 语句一样。
这里是一个片段,显示此代码应该按预期工作:
document.addEventListener("click", function (e) {
if (e.target && e.target.matches(".supp")) {
alert("It works");
}
});
.supp {
width: 100px;
height: 100px;
background-color: blue;
color: white;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
<div class="supp">Click me</div>
我正在尝试添加 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>
Controler.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 class 假设所有其他都工作正常,因为我没有为其他事件使用 div class . 谢谢
如果我没理解错的话,您希望您的控制器逻辑检测并处理带有 supp
class 的元素上的点击事件。
要通过对代码进行最少的更改来实现这一点,您可以通过 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 的元素(这就是为什么如果检查单击处理程序?) - 另一种可能会给你更多灵活性的逻辑方法是通过类似 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>
希望对您有所帮助!
你可以使用这个
const div = document.getElementsByClassName("supp");
else if (div[0]!=undefined) {
alert(e.target.id)
controleur.supprimerItem();
}
希望对您有所帮助
您正在尝试使用函数参数 event
,您的函数中并未调用该参数。您在函数中将参数命名为 e
。
此外,.matches()
checks if an element would normally be targeted based on a selector string. Which is what you would normally use to target elements with document.querySelector()
。所以supp
应该改为.supp
.
因此,当您将代码更改为:
时,您的代码应该可以正常工作} else if (e.target.matches('.supp')) {
controleur.supprimerItem();
}
甚至:
} else if (e.target && e.target.matches('.supp')) {
controleur.supprimerItem();
}
就像您的其他 if 语句一样。
这里是一个片段,显示此代码应该按预期工作:
document.addEventListener("click", function (e) {
if (e.target && e.target.matches(".supp")) {
alert("It works");
}
});
.supp {
width: 100px;
height: 100px;
background-color: blue;
color: white;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
<div class="supp">Click me</div>