質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

869閲覧

JavaScriptで入力欄を増やしたときにjQueryの日付入力がうまくいかない

swing_swimming

swing_swimming

総合スコア54

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/08/09 10:42

前提・実現したいこと

氏名を選択し、日時と内容を入力する入力フォームを作成しています。
何人分入力するかわからないため、JavaScriptでボタンを押すと入力欄を増やすようにしたいと思います。

発生している問題・エラーメッセージ

入力欄を増やすことはできたのですが、日時の入力がうまくいきません。
日時の入力欄にはBootstrap-Material-Datepickerを使っているのですが、
下の方の入力欄をクリックして入力しても必ず一番上の入力欄に入力されてしまいます。

該当のソースコード

JavaScript

1$(function(){ 2 $('#id_answer_at').bootstrapMaterialDatePicker({ 3 format: 'YYYY-MM-DD HH:mm', 4 lang:"ja", 5 }); 6}); 7 8$(function(){ 9 $('#answer_at_1').bootstrapMaterialDatePicker({ 10 format: 'YYYY-MM-DD HH:mm', 11 lang:"ja", 12 }); 13}); 14 15$(document).on("click", ".add", function() { 16 var target = $(this).parent().parent(); 17 // 入力値を消去する 18 var clone = target.clone(true); 19 clone[0].children[0].children['answer_name'][0].selectedIndex = 0; 20 // clone[0].children[1].children[0].value = ''; //日付は維持する 21 clone[0].children[2].children[0].value = ''; 22 // idに付与するための行番号を取得 23 var row = Number(target.parent().children().length) + 1; 24 // カレンダーフォームにidを設定 25 clone[0].children[1].children.answer_at.id = "answer_at_" + String(row); 26 // data-dtpを削除 27 clone[0].children[1].children[0].removeAttribute('data-dtp'); 28 // コピーを作成 29 clone.insertAfter(target); 30 31 // カレンダーイベントの再設定 32 $("#answer_at_" + String(row)).bootstrapMaterialDatePicker({ 33 format: 'YYYY-MM-DD HH:mm', 34 lang:"ja", 35 }); 36}); 37 38$(document).on("click", ".del", function() { 39 var target = $(this).parent().parent(); 40 if (target.parent().children().length > 1) { 41 target.remove(); 42 } 43});

HTML

1<table class="table table-sm"> 2 <thead> 3 <tr class="d-flex"> 4 <td class="col-2" align="center"><b>氏名</b></td> 5 <td class="col-2" align="center"><b>日時</b></td> 6 <td class="col-7" align="center"><b>内容</b></td> 7 <td class="col-1" align="center">追加</td> 8 </tr> 9 </thead> 10 <tbody> 11 <div id="input_pluralBox"> 12 <div id="input_plural"> 13 <tr class="d-flex"> 14 <td class="col-2" align="center"> 15 <select name="answer_name" id="answer_name_1"> 16 <option value="">--------</option> 17 </select> 18 </td> 19 <td class="col-2" align="center"> 20 <input type="text" name="answer_at" id="answer_at_1"> 21 </td> 22 <td class="col-7" align="center"> 23 <textarea name="answer_content" style="width:100%;" rows="1" 24 id="answer_content_1"></textarea> 25 </td> 26 <td class="col-1" align="center"> 27 <input type="button" value="+" class="add pluralBtn"> 28 <input type="button" value="-" class="del pluralBtn"> 29 </td> 30 </tr> 31 </div> 32 </div> 33 </tbody> 34</table>

試したこと

$("#answer_at_" + String(row)).bootstrapMaterialDatePicker({
format: 'YYYY-MM-DD HH:mm',
lang:"ja",
});
"#answer_at_" + String(row)をthisに変えてみたり

上の
$(function(){
$('#answer_at_1').bootstrapMaterialDatePicker({
format: 'YYYY-MM-DD HH:mm',
lang:"ja",
});
});
を消してみたり
https://teratail.com/questions/178377
を参考に試してみたりしましたが、うまくいきません。

補足情報(FW/ツールのバージョンなど)

最初にjquery-3.4.1.js、jquery-ui-1.12.1.js、bootstrap.css、bootstrap.bundle.js、
bootstrap-material-datetimepicker.css、moment.js、ja.js、bootstrap-material-datetimepicker.jsを読み込んでいます。
Microsoft Edgeを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のように修正してみてください。

diff

1@@ -15,7 +15,7 @@ $(function(){ 2 $(document).on("click", ".add", function() { 3 var target = $(this).parent().parent(); 4 // 入力値を消去する 5- var clone = target.clone(true); 6+ var clone = target.clone(false); 7 clone[0].children[0].children['answer_name'][0].selectedIndex = 0; 8 // clone[0].children[1].children[0].value = ''; //日付は維持する 9 clone[0].children[2].children[0].value = '';

jQuery の clone() は引数に true を指定すると、設定されているイベントも丸ごとコピーします。紐づけられているイベントの更新ターゲットは #answer_at_1 のままだったのでしょう。

投稿2020/08/13 16:30

saoyagi2

総合スコア210

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swing_swimming

swing_swimming

2020/08/13 16:50

教えていただいた通りにしたところうまくいきました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問