0

次のコードをデバッグとして使用しています。ラジオ ボタンのクリックを監視し、適切にスタイルを設定しようとしています。

$("#item-select-form label.radio").click(function() {
  var child_input, input_id;
  console.log("clicked!");
  child_input = $(this).children("input");
  input_id = child_input.attr("id");
  return console.log(input_id);
});

コードは正常に動作しているようです。「クリックされた!」を取得します。子入力の適切なIDが表示されます。ただし、このコードは 2 回実行されており、その理由がわかりません (違いがある場合は Rails を使用しています)。

どこから、なぜ呼び出されたのかを追跡するにはどうすればよいですか?

4

2 に答える 2

1

このイベントを ajax 応答にバインドしている場合、複数回トリガーされます。再度バインドする前にイベントのバインドを解除する必要があります (エラーが発生する前にバインドがなかった場合) また、コードに改善があります。 、次のいずれかを使用できます。

$("#item-select-form").find("label.radio").click...

また

$("#item-select-form").click(function(e){ 
    var elemPressed = $(e.target);
    if( elemPressed ).is("label.radio") ){
      //do your stuff
    }
});

これらの手法はどちらも元のセレクター ( sizzleを使用 ) よりも高速であり、2 番目の手法 (私のお気に入り) では、複数のイベントを作成する代わりに、ページのセクション全体に対して単一のイベントを作成できます (したがって、パフォーマンスが低下します)。 DOMへ

于 2012-12-22T01:02:26.170 に答える