1

だから私はテキストフィールドを持っています:

number of weeks <div id = "weekcount"><input type="text" id="numweeks" name="numweeks" value="" class = "dialog_inputfield" /></div><br />

そして、任意の時点でそのテキスト フィールドの値が変化するかどうかをチェックする Javascript 関数:

$('#numweeks').keyup(function(event) {
        var date = $('#datepicker').val();
        var numWeeks = $('#numweeks').val();
        change(calculate(date, numWeeks));
});

そして、それはうまくいきます。しかし、innerHTML を使用して、id "weekcount" の div を別のテキスト フィールドを含むように変更し、次のように元のテキスト フィールドに戻しました。

document.getElementById('weekcount').innerHTML = '<input type="text" id="numweeks" name="numweeks"  value="" class = "dialog_inputfield" />'

その後、IDは以前と同じですが、キーアップは機能しなくなります。私が間違っていることはありますか?ありがとう。

4

1 に答える 1

3

現在、DOM 要素に直接バインドしていますがinnerHTML、それが割り当てに置き換えられるため、イベント バインディングも失われます (これは新しい DOM 要素です)。

あなたが望むのは、委任された(「ライブ」)イベントを使用することです。jQueryon関数を見てください。すべてのイベント処理パターンがうまく統合されています。

$('#weekcount').on('keyup', '#numweeks', function(event) {
        var date = $('#datepicker').val();
        var numWeeks = $('#numweeks').val();
        change(calculate(date, numWeeks));
});
于 2013-05-27T17:24:51.937 に答える