1

動的に生成されたフォームフィールドがいくつかあります。変更したばかりの値に基づいて入力フィールドを更新したいと思います。以下のコードをいじった後、イベントは2回発生するようです(アラートが2回発生するため)。最初のトリガーは私が望むようにテキストフィールドを変更しますが、2番目のトリガーはそれをゼロに変更します。以下のコードが2回起動するのはなぜですか?どうすればこれを防ぐことができますか?

Coffeescript

$(document).on 'change','#qty', ->
  $('#amount').val($(this).val())
  alert($(this).val())

上記と同等のJavascript

$(document).on('change', '#qty', function() {
  $('#amount').val($(this).val());
  return alert($(this).val());
});
4

2 に答える 2

1

機能に問題はありませんon()このフィドルを参照してください。

コード:

$('body').append($('<input>').attr('id', 'dynamic'));
$(document).on('keyup', '#dynamic', function(e) {
    console.log(e, e.target);
    /*
    Since all functions in JavaScript has a return value, 
    and if you don't specify them they would default to undefined, 
    thus you might return something explicitly here. 
    But it has no effect upon the execution of the on() function.
    */
});

偶数ハンドラーを2回バインドしていると思います。それが最も可能性の高いケースです。それをテストするには、最初に を#dynamic使用して要素にアタッチされたハンドラーを確認することをお勧めします$('#dynamic').data('events')。未定義の場合、ハンドラはまだバインドされていませんが、オブジェクトが返された場合は、何らかのイベントがバインドされています。

于 2013-02-07T05:54:06.350 に答える
0

要素を追加するたびにコードを実行しているので、要素に直接バインドするだけです。

$("#qty").on("change",...
于 2013-02-07T04:57:04.773 に答える