2010-10-11 19 views

Répondre

276
onclick="doSomething();doSomethingElse();" 

Mais vraiment, vous êtes mieux de ne pas utiliser du tout onclick et attacher le gestionnaire d'événements au nœud DOM dans votre code Javascript. Ceci est connu comme unobtrusive javascript.

+1

Merci pour la référence à JS discrète, je suis tombé sur cela avant, et je devrais éviter d'écrire JS intrusive juste parce que je suis paresseux! xD – Qcom

+6

pas de problèmes ... Je recommande également fortement jQuery qui vous aidera vraiment avec votre objectif discret. Vous pouvez facilement attacher des gestionnaires d'événements aux éléments DOM et faire beaucoup plus discrètement. Je l'ai utilisé pendant 2 ans et je n'ai jamais regardé en arrière. – brad

+4

Si une action appelée dans l'onclick échoue, l'ensemble tombe comme une chaîne de domino et l'onclick ne fonctionne pas. –

4

Bien sûr, il suffit de lier plusieurs écouteurs.

Short cutting with jQuery

$("#id").bind("click", function() { 
 
    alert("Event 1"); 
 
}); 
 
$(".foo").bind("click", function() { 
 
    alert("Foo class"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="foo" id="id">Click</div>

+3

jamais mentionné jQuery – hunter

+0

@hunter: J'étais en train de couper avec jQuery. Je ne me souviens pas exactement du code de l'écouteur d'événement natif.Vous pouvez aussi faire ce que Marko mentionne, mais il vaut mieux utiliser un écouteur d'événement. –

+1

Peut ne pas avoir répondu à la question d'origine, mais puisque j'utilise jQuery, il a répondu à la mienne. –

57

Un lien avec une fonction définie

<a href="#" onclick="someFunc()">Click me To fire some functions</a> 

Firing multiples fonctions de someFunc()

function someFunc() { 
    showAlert(); 
    validate(); 
    anotherFunction(); 
    YetAnotherFunction(); 
} 
+2

IMHO, c'est l'approche du vrai programmeur. –

+0

@ b1nary.atr0phy non. le moyen du programmeur est d'ajouter un attribut href = "" lorsque l'utilisateur n'a pas de javascript. puis, avec javascript (donc vous savez que l'utilisateur le supporte), vous supprimez le href, et ajoutez des écouteurs d'événement à l'événement. De cette façon, si un autre module de votre code écoute le même clic, il ne sera pas écrasé, ni écraser votre code. read: https://developer.mozilla.org/en-US/docs/Web/API/Event – gcb

+3

Cela peut ne pas fonctionner correctement si vous avez des arguments transmis aux fonctions, en particulier si vous générez ces arguments à partir d'un serveur ... langue latérale. Il serait plus facile de construire/maintenir le code en ajoutant les fonctions (avec n'importe quel argument) dans le langage côté serveur plutôt que de tester toutes les itérations possibles sur le serveur et le client. – Siphon

9

j'utiliser la méthode element.addEventListener pour le relier à une fonction. A partir de cette fonction, vous pouvez appeler plusieurs fonctions. L'avantage que je vois en liant un événement à une seule fonction et en appelant ensuite plusieurs fonctions est que vous pouvez effectuer une vérification d'erreur, avoir des instructions if else, de sorte que certaines fonctions ne sont appelées que si certains critères sont remplis.

26

Ce code est nécessaire si vous utilisez uniquement JavaScript et non jQuery

var el = document.getElementById("id"); 
el.addEventListener("click", function(){alert("click1 triggered")}, false); 
el.addEventListener("click", function(){alert("click2 triggered")}, false); 
+6

cela devrait être la bonne réponse et la bonne façon de le faire. – Fusion

0

Vous pouvez composer toutes les fonctions en un seul et appeler them.Libraries comme Ramdajs a une fonction pour composer plusieurs fonctions en un seul .

<a href="#" onclick="R.compose(fn1,fn2,fn3)()">Click me To fire some functions</a> 

ou vous pouvez mettre la composition en fonction séparée dans le fichier js et l'appeler

const newFunction = R.compose(fn1,fn2,fn3); 


<a href="#" onclick="newFunction()">Click me To fire some functions</a> 
+0

,, vous êtes obsédé par ramda. –

0

Vous pouvez ajouter plusieurs que par le code même si vous avez la deuxième onclick atribute dans le html il obtient ignoré, et click2 triggered ne sera jamais imprimé, vous pouvez ajouter un sur l'action mousedown mais c'est juste une solution de contournement.

Ainsi, le mieux à faire est de les ajouter par le code comme dans:

var element = document.getElementById("multiple_onclicks"); 
 
element.addEventListener("click", function(){console.log("click3 triggered")}, false); 
 
element.addEventListener("click", function(){console.log("click4 triggered")}, false);
<button id="multiple_onclicks" onclick='console.log("click1 triggered");' onclick='console.log("click2 triggered");' onmousedown='console.log("click mousedown triggered");' > Click me</button>

Vous devez prendre soin que les événements peuvent accumuler, et si vous ajoutez beaucoup vous des événements peut perdre le compte de l'ordre, ils sont courus.