質問: esc2subtotal; } }); //1行挿入された状態で一度サブミット $(document.forms["quotation"]).submit(); //ここに入れてみたけどだめでした // $(window).off('beforeunload'); ; break; case 2: ; break; case 3: ; break; case 4: ; break; } }); ``` 値が変更されたとき(input要素、select要素が変更された場合)に ブラウザの戻るや更新ボタン、タブを閉じるときに 警告をだすようにする ``` $(window).ready(function(){ $('input, textarea, select, radio').on('keyup change', function(){ $(window).on('beforeunload', function() { return "入力途中のデータがあります。このページを離れると、入力したデータが削除されます。本当に移動しますか。"; }); $("#cancel").click(function () { $(window).on('beforeunload', function() { return "入力途中のデータがあります。このページを離れると、入力したデータが削除されます。本当に移動しますか。"; }); }); }); // 戻るリンクや送信ボタンなどの通常の方法で画面遷移した場合は、 // 通常通りアラートは表示されずに遷移する $('button[type=submit], input[type=submit]').on('click', function(e) { $(window).off('beforeunload'); }); }); ```
回答: jsで動的に追加したDOMに関連あるイベント(クリックなど)を 動作させるにはdocumentでイベントの発火を検知する必要があります。 ※ 旧バージョンではliveというメソッドがありました。 もしくは、DOMを追加する時にイベントをbindする必要があります。 下記は、documentでイベントを検知する方法です。 もしかしたら、changeイベントを受け取れないかも? その場合はclickイベントに変更するなど工夫が必要かと思います。 ``` $( '.control' ).change( function() { // チェンジした時の処理 }); ↓ // 上記を下記に書き換えてみてはどうでしょうか? $(document).on('change', '.control', function () { // チェンジした時の処理 }); ```