web-dev-qa-db-ja.com

jQuery変更イベントが2回呼び出される

入力ボックスと選択ボックスのあるフォームがあり、それぞれにclass="myClass"。次のスクリプトもあります。

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

選択ボックスまたは入力ボックスを変更するたびに、この関数が2回呼び出される理由がわかりません。ここで何が問題なのですか?

あなたの助けに感謝!

33
Israel

私が考えることができるのは、フォーム自体で同じクラスを使用したことだけです。その場合は、フォームタグからmyClassスタイルを削除します。

修正済み: http://jsfiddle.net/rY6Gq/1/

二重アラートのある障害: http://jsfiddle.net/rY6Gq/

45
Marc Uberstein

e.stopImmediatePropagation();私のために働いたものです。

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

そのバグ、あなたが追加します

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

変更コールの前

9

同じクラスまたはバインドしている属性に同じ名前の親または子がある場合にも発生します。明らかに、子を変更すると、親も変更されます(子が変更されます)。それらが同じクラスまたは属性を持っている場合、2回起動する必要があります。たとえば、次の例では、「myClass」にバインドすると、2回呼び出されます。

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

iEでこれが発生した場合、それは私にとってはこのバグである可能性があります: http://bugs.jquery.com/ticket/659

jQuery 1.7.1への更新はうまくいきました。

3
user996015

そうではありません: http://jsfiddle.net/nfcAS/

0
Šime Vidas

私のために働いた唯一のものは、変更チェックの前にバインドを解除しました。

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