web-dev-qa-db-fra.com

Événement jQuery change appelé deux fois

J'ai un formulaire avec des champs de saisie et de sélection, chacun a class="myClass". J'ai également le script suivant:

$(document).ready(function() {
    $(".myClass").change(function() {
        alert('bla');
    })
});

Je ne comprends pas pourquoi après chaque changement dans la zone de sélection ou la zone de saisie, cette fonction est appelée deux fois. Qu'est-ce qui ne va pas ici?

Apprécier ton aide!

33
Israel

Tout ce que je peux penser, c'est que vous avez utilisé la même classe sur le formulaire lui-même. si tel est le cas, supprimez le style myClass de votre balise de formulaire.

Corrigé: http://jsfiddle.net/rY6Gq/1/

Un défaut avec double alerte: http://jsfiddle.net/rY6Gq/

45
Marc Uberstein

e.stopImmediatePropagation (); c'est ce qui a fonctionné pour moi.

$(document).ready(function() {
    $(".myClass").change(function(e) {
        e.stopImmediatePropagation();
        alert('bla');
    })
});
22
jwebb

C'est un bug, vous ajouteriez

$("#some_id").unbind('change');

avant tout changement d'appel

9
diego matos - keke

Cela se produit lorsque la même classe ou tout autre attribut que vous liez a également le même nom parent ou enfant. Évidemment, lorsque vous changez un enfant, le parent est également changé (son enfant change). S'ils ont la même classe ou le même attribut, il devrait se déclencher deux fois. Par exemple, dans ce qui suit, si vous vous liez à "maClasse", il sera appelé deux fois.

<div class="myclass">
<select class="myClass">   </select>
</div>
3
Selay

si cela s'est produit dans IE, il peut s'agir de ce bogue tel qu'il était pour moi: http://bugs.jquery.com/ticket/659

la mise à jour vers jQuery 1.7.1 a fonctionné pour moi.

3
user996015
0
Šime Vidas

Le seul qui a fonctionné pour moi était non lié avant le contrôle des modifications.

 $(".select2Component").unbind(); 
    $(".select2Component").change(function() { 
         //code
    });
0
Neha