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

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

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

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

Q&A

解決済

3回答

2100閲覧

js ボタン押下で要素追加

coko1

総合スコア276

JavaScript

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

0グッド

0クリップ

投稿2016/11/24 01:34

編集2016/11/24 05:29

お世話になります。

現在タイムスケジュールを設定できるような処理を作成中で、初期表示として以下のようにHTMLに記述しています。

<tr class="time-group"> <td>グループ1.名称<input type="text" id="group-name1"> 開始<select id="start-hour-group1"></select> : <select id="start-min-group1"></select> 終了<select id="end-hour-group1"></select> : <select id="end-min-group1"></select> </td> </tr>

イメージ説明

タイムスケジュールを複数登録できるようにしていきたいのですが、HTMLに記述して固定で複数の入力欄を設けているのが現状です。それをjs側の処理として追加ボタンを押下時にHTMLでの記述のような要素を一行分追加して以下のようにしたいのですがjs側でどうやって作ればよいのでしょうか?

<tr> <td>グループ1.名称<input type="text" id="group-name1"> 開始<select id="start-hour-group1"></select> : <select id="start-min-group1"></select> 終了<select id="end-hour-group1"></select> : <select id="end-min-group1"></select> </td> </tr> <tr> <td>グループ2.名称<input type="text" id="group-name2"> 開始<select id="start-hour-group2"></select> : <select id="start-min-group2"></select> 終了<select id="end-hour-group2"></select> : <select id="end-min-group2"></select> </td> </tr>

イメージ説明

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

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

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

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

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

guest

回答3

0

ベストアンサー

ボタンをクリックされたタイミングで追加したいidを生成し、

javascript

1$("#希望するID").length

が0でないなら既にそのIDは存在するので生成し直し
でどうですか

###追記
よくみるとgetElementByIdなどを使うという事はjquery等使ってないのですね。。。jquery使わないコードでさきほどのidの確認もしたものを追記します。

<table id="table"> <tbody> <tr class="time-group"> <td>グループ1.名称<input type="text" id="group-name1"> 開始<select id="start-hour-group1"></select> : <select id="start-min-group1"></select> 終了<select id="end-hour-group1"></select> : <select id="end-min-group1"></select> </td> </tr> </tbody> </table> <button onClick="addline();">登録</button> <script> var id=1; function addline(){ while(document.getElementById("group-name"+id)) id++; table = document.getElementById("table"); row = table.insertRow(-1); row.setAttribute("class","time-group"); row.innerHTML = '<td>グループ1.名称<input type="text" id="group-name'+id+'">\n'+ '開始<select id="start-hour-group1"></select> : <select id="start-min-group1"></select>\n'+ '終了<select id="end-hour-group1"></select> : <select id="end-min-group1"></select>'; } </script>

投稿2016/11/24 02:25

編集2016/11/24 06:39
hiim

総合スコア1689

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

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

coko1

2016/11/24 05:30

ボタン押下時に一行分の要素を追加したいのですがそちらは同実装するのがよいのでしょうか?
hiim

2016/11/24 06:39

追記しました
guest

0

jqueryを覚えるとラクですね。

行をコピーして、最後の行の次に追加。

ネームやらアイディーやらを末尾に1足したり、書き換えたり…。

使い方覚えるしかないですね。

投稿2016/11/24 14:12

KatsukiSugiura

総合スコア335

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

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

0

そもそも id ではなく name では?

HTML

1<tr class="time-group"> 2 <td>グループ1.名称<input type="text" name="group-name[]"> 3 開始<select name="start-hour-group[]"></select> : <select name="start-min-group[]"></select> 4 終了<select name="end-hour-group[]"></select> : <select name="end-min-group[]"></select> 5 </td> 6</tr>

投稿2016/11/24 02:20

kei344

総合スコア69400

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

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

coko1

2016/11/24 02:41

jsでgetElementByIdで要素を取得していたので...
kei344

2016/11/24 02:44

name を設定しないとPOST出来ないと思いますが、そういう使い方ではないのですね。 また、getElementByIdをどう使っているかによって、提示する手段も変わってきますので、JavaScriptも追記されることをお勧めします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問