Ajouter cliquez sur l'écouteur d'événements pour les éléments avec la même classe
J'ai une vue de liste pour supprimer l'id. J'aimerais ajouter un écouteur à tous les éléments avec une classe particulière et de faire confirmer l'alerte.
Mon problème est que cela ne fait qu'ajouter à l'auditeur pour le premier élément avec la classe qu'il trouve. J'ai essayé d'utiliser querySelectorAll
mais il ne fonctionne pas.
var deleteLink = document.querySelector('.delete');
deleteLink.addEventListener('click', function(event) {
event.preventDefault();
var choice = confirm("sure u want to delete?");
if (choice) {
return true;
}
});
Liste:
<?php
while($obj=$result->fetch_object())
{
echo '<li><a class="delete" href="removeTruck.php?tid='.$obj->id.'">'.$obj->id.'</a>'
. '<a href="#" class="delete"></a>
</li>'."\n";
}
/* free result set */
$result->close();
$mysqli->close();
?>
- Pourquoi taggés avec jQuery? BTW, vous auriez mieux délégué de l'événement au lieu de définir pour chacun d'eux .supprimer l'élément propre gestionnaire
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
querySelectorAll
. Il retourne NodeList, cependantquerySelector
renvoie uniquement le premier élément trouvé:Alors vous seriez en boucle:
Aussi, vous devez preventDefault seulement si
confirm === false
.Il est également intéressant de noter que
return false/true
est seulement utile pour les gestionnaires d'événements liés àonclick = function() {...}
. PouraddEventListening
vous devez utiliserevent.preventDefault()
.Démo: http://jsfiddle.net/Rc7jL/3/
ES6 version
Vous pouvez en faire un peu plus propre (et le plus sûr fermeture en boucle sage) à l'aide de Tableau.le prototype.forEach itération au lieu de pour-boucle:
L'exemple ci-dessus utilise Tableau.à partir de et modèle de chaînes de caractères de ES2015 standard.
Array.from(deleteLinks)
, vous pouvez le faire[...deleteLinks]
. Je pense queArray.from
est plus clair, mais juste une chose mérite d'être souligné.Le problème avec l'aide de
querySelectorAll
et unfor
boucle, c'est qu'il crée un tout nouveau gestionnaire d'événement pour chaque élément dans le tableau.Parfois, c'est exactement ce que vous voulez. Mais si vous avez de nombreux éléments, il peut être plus efficace de créer un seul gestionnaire d'événements et de l'attacher à un élément conteneur. Vous pouvez ensuite utiliser
event.target
à référencer l'élément qui a déclenché l'événement:Dans cet exemple, nous créer un gestionnaire d'événement qui est attaché à la
body
élément. Chaque fois qu'un élément à l'intérieur de labody
est cliqué, laclick
événement bulles à notre gestionnaire d'événement.Un court et doux solution, en utilisant ES6:
Vous devez utiliser
querySelectorAll
que vous devez sélectionner tous les éléments avec la classe dit, encore une fois depuisquerySelectorAll
est un tableau, vous devez parcourir et ajouter des gestionnaires d'événementsquerySelectorAll
ne retourne pas uneArray
, mais unNodeList
, qui ressemble à uneArray
mais qui n'ont pas les mêmes méthodes.