2017-10-20 17 views
1

Lorsqu'un utilisateur ouvre une modalité, il existe deux façons de la fermer, l'une en appuyant sur la touche 'x' dans le coin supérieur droit de la boîte, ou en appuyant sur le bouton d'annulation. Les deux boutons sont tous les deux dans le même nom de classe modal-hide mais ont également des ID de modal-close et modal-cancel.Comment ajouter un gestionnaire d'événement de clic pour deux boutons différents sans utiliser jQuery?

var cancel = document.getElementById('modal-cancel'); 
var close = document.getElementById('modal-close'); 

cancel.onclick = function() { 
    //close window 
} 
close.onlick = function() { 
    //close window 
} 

Quelle est la meilleure façon de mettre en œuvre un gestionnaire d'événements pour que je ne dois pas écrire deux fonctions onclick différentes qui font la même chose?

Je ne veux pas du tout utiliser jQuery!

+0

double possible de [Liez une fonction à Twitter Bootstrap Modal Fermer] (https://stackoverflow.com/questions/8363802/bind-a-function-to-twitter-bootstrap-modal-close) – Ollaw

+0

I Je ne dirais pas que c'est le «meilleur» moyen, mais le plus petit changement au code affiché est peut-être 'cancel.onclick = close.onclick = function() {..}'. – nnnnnn

Répondre

2

Tout d'abord, n'utilisez pas les propriétés d'événement! Utilisez plutôt addEventListener (MDN) comme standard moderne. Ensuite, vous devez définir une fonction de gestionnaire distinct (disons onClick) pour le lier avec vos éléments:

var cancelElt = document.getElementById('modal-cancel'); 
var closeElt = document.getElementById('modal-close'); 
var onClick = function() { 
    alert('Hello!'); 
}; 

cancelElt.addEventListener('click', onClick); 
closeElt.addEventListener('click', onClick); 
1

Utilisez simplement des fonctions nommées au lieu de fonctions anonymes. J'utilise addEventListener ci-dessous au lieu de onclick.

var cancel = document.getElementById('modal-cancel'); 
var close = document.getElementById('modal-close'); 

var clickFunction = function() { 
    // close modal 
} 

cancel.addEventListener('click', clickFunction, false); 
close.addEventListener('click', clickFunction, false); 
+0

Merci! Cela fait juste ce que je voulais! Seule question que j'ai est ce que fait le faux paramètre dans la commande addEventListener? –

+0

Comme le décrit cette [doc] (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener), il peut vous aider à éviter les messages d'avertissement sur le mode passif. Pas nécessaire, mais bonne habitude. – davidchappy

+0

@ C.Ols, l'instruction false/true fait que l'événement utilise la capture ou non. Fondamentalement, avec la valeur true, tous les événements dont la capture est définie sur true dans tout élément ancêtre seront exécutés en premier. Faux est le contraire. – Mouser

0

Une solution qui est essentiellement une ligne.

Array.prototype.forEach.call(document.querySelectorAll("#modal-cancel, #modal-close"), function(element) { 
    element.addEventListener("click", function() { 
     //close window 
    }, false); 
});