1076 votes

jQuery : plusieurs événements pour déclencher la même fonction

Y a-t-il un moyen d'avoir keyup , keypress , blur y change appellent la même fonction en une seule ligne ou dois-je les faire séparément ?

Le problème auquel je suis confronté est que je dois valider certaines données à l'aide d'une consultation de base de données et que je voudrais m'assurer que la validation n'est pas omise dans tous les cas, que les données soient tapées ou collées dans la boîte.

1977voto

Tatu Ulmanen Points 52098

Vous pouvez utiliser .on() pour lier une fonction à plusieurs événements :

$('#element').on('keyup keypress blur change', function(e) {
    // e.type is the type of event fired
});

Ou simplement passer la fonction comme paramètre aux fonctions d'événement normales :

var myFunction = function() {
   ...
}

$('#element')
    .keyup(myFunction)
    .keypress(myFunction)
    .blur(myFunction)
    .change(myFunction)

4 votes

Avec des événements séparés par des espaces, comment inclure également l'espacement des noms ? .on('keyup.foo keypress.foo blur.foo change.foo', …) o .on('keyup keypress blur change .foo', …) ?

29 votes

Le problème est que maFonction sera probablement appelée plusieurs fois, ce que vous voudrez peut-être éviter.

2 votes

Comment puis-je passer un paramètre dans cette fonction ?

64voto

lesyk Points 2197

À partir de la version 1.7 de jQuery, la fonction .on() est la méthode préférée pour attacher des gestionnaires d'événements à un document. Pour les versions antérieures, la méthode .bind() est utilisée pour attacher un gestionnaire d'événements directement aux éléments.

$(document).on('mouseover mouseout',".brand", function () {
  $(".star").toggleClass("hovered");
})

1 votes

Ceci est fait pour un événement délégué, cela fonctionnera, mais ce n'est pas la façon la plus simple de le faire, ni la plus efficace.

1 votes

La délégation d'événements est importante, et peut (ou non) être requise en fonction du moment où le script est chargé / exécuté, et si les éléments existent dans le DOM au moment où le script est chargé / exécuté.

53voto

Alain Tiemblo Points 8884

Je cherchais un moyen d'obtenir le type d'événement lorsque jQuery écoute plusieurs événements à la fois, et Google m'a mis ici.

Donc, pour ceux qui sont intéressés, event.type est ma réponse :

$('#element').on('keyup keypress blur change', function(event) {
    alert(event.type); // keyup OR keypress OR blur OR change
});

Plus d'informations dans le Document sur jQuery .

25voto

Giorgi Points 15760

Vous pouvez utiliser méthode de liaison pour attacher une fonction à plusieurs événements. Il suffit de passer les noms des événements et la fonction de gestion comme dans ce code :

$('#foo').bind('mouseenter mouseleave', function() {
  $(this).toggleClass('entered');
});

Une autre option consiste à utiliser le support de chaînage de l'API de Jquery.

9 votes

Depuis la version 1.7 de jQuery, la méthode .on() est la méthode préférée pour attacher des gestionnaires d'événements à un document.

18voto

Dave Ward Points 36006

Si vous attachez le même gestionnaire d'événements à plusieurs événements, vous rencontrez souvent le problème de l'exécution simultanée de plusieurs d'entre eux (par exemple, l'utilisateur appuie sur la touche de tabulation après l'édition ; l'appui sur la touche, la modification et le flou peuvent tous s'exécuter).

On dirait que ce que vous voulez vraiment est quelque chose comme ça :

$('#ValidatedInput').keydown(function(evt) {
  // If enter is pressed
  if (evt.keyCode === 13) {
    evt.preventDefault();

    // If changes have been made to the input's value, 
    //  blur() will result in a change event being fired.
    this.blur();
  }
});

$('#ValidatedInput').change(function(evt) {
  var valueToValidate = this.value;

  // Your validation callback/logic here.
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X