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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

5364閲覧

JavaScript、ラジオボタンでのフォームの表示・非表示の切り替え方法

moppu

総合スコア9

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/08/28 14:42

編集2018/08/30 04:40

前提

現在cakePHP3を使い、簡単なwebサイトを作成しています。

###期待値
ユーザーとチームの登録ページを作成しているのですが、ラジオボタンでユーザーを選択するとユーザー登録用のフォームが2つ出てきて、ラジオボタンでチームを選択するとチーム登録用のフォームが2つ出るようにしたいです。

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

ラジオボタンでユーザーを選択した場合の表示は正常なのですが、ラジオボタンでチームを選択した場合にフォームが切り替わることなくフォームが増えてしまう現象が起きる。(消えてほしいものが消えない)

該当のソースコード

html

1<form class="form-control" action="./score" method="post"> 2 <table class="layout-set" border="0" cellspacing="0" cellpadding="0"> 3 <tr> 4 <th>登録種別</th> 5 <td> 6 <label><input type="radio" name="entryPlan" value="hoge1" onclick="entryChange1();" checked="checked" />ユーザー</label> 7 <label><input type="radio" name="entryPlan" value="hoge2" onclick="entryChange1();" />チーム</label> 8 </td> 9 </tr> 10 11 <!-- 表示非表示切り替え --> 12 <tr id="firstBox"> 13 <tr> 14 <th>ユーザー名:</th> 15 <td><input type="text" class="form-control" placeholder="ユーザー名"/></td> 16 </tr> 17 <tr> 18 <th>チーム名:</th> 19 <td> 20 <select class="custom-select"> 21 <option selected>チーム選択</option> 22 <option value="1">A-team</option> 23 <option value="2">B-team</option> 24 <option value="3">C-team</option> 25 <option value="4">D-team</option> 26 <option value="5">E-team</option> 27 </select> 28 </td> 29 <!-- <p>紹介された方のお名前を入力してください。</p></td> --> 30 </tr> 31 </tr> 32 33 <!-- 表示非表示切り替え --> 34 <tr id="secondBox"> 35 <th>チーム名:</th> 36 <td><input type="text" class="form-control" placeholder="チーム名"/></td> 37 </tr> 38 </table> 39</form> 40 41<!--スクリプト--> 42<script type="text/javascript"> 43 function entryChange1(){ 44 radio = document.getElementsByName('entryPlan') 45 if(radio[0].checked) { 46 //フォーム 47 document.getElementById('firstBox').style.display = ""; 48 document.getElementById('secondBox').style.display = "none"; 49 //特典 50 //document.getElementById('firstNotice').style.display = ""; 51 }else if(radio[1].checked) { 52 //フォーム 53 document.getElementById('firstBox').style.display = "none"; 54 document.getElementById('secondBox').style.display = ""; 55 //特典 56 //document.getElementById('firstNotice').style.display = "none"; 57 } 58 } 59 60 //オンロードさせ、リロード時に選択を保持 61 window.onload = entryChange1; 62</script> 63

変更後の問題点

フォームを2つずつ表示させたいのですが <tr>が一つにしかかからない為、ラジオボタンを切り替えても、フォームが3つ表示され切り替わらない。

###変更後ソース

html

1<!--インデント整えたバージョン--> 2 3<form class="form-control" action="./score" method="post"> 4 <table class="layout-set" border="0" cellspacing="0" cellpadding="0"> 5 <tr> 6 <th>登録種別</th> 7 <td> 8 <label> 9 <input type="radio" name="entryPlan" value="hoge1" onclick="entryChange1();" checked="checked" /> 10 ユーザー 11 </label> 12 <label> 13 <input type="radio" name="entryPlan" value="hoge2" onclick="entryChange1();" /> 14 チーム 15 </label> 16 </td> 17 </tr> 18 <!-- 表示非表示切り替え --> 19 <tr><!-- ←追加分--> 20 <tr id="firstBox"> 21 <!--<tr> ←削除分--> 22 <th>ユーザー名:</th> 23 <td><input type="text" class="form-control" placeholder="ユーザー名"/></td> 24 </tr> 25 <tr> 26 <th>チーム名:</th> 27 <td> 28 <select class="custom-select"> 29 <option selected>チーム選択</option> 30 <option value="1">A-team</option> 31 <option value="2">B-team</option> 32 <option value="3">C-team</option> 33 <option value="4">D-team</option> 34 <option value="5">E-team</option> 35 </select> 36 </td> 37 <!-- <p>紹介された方のお名前を入力してください。</p></td> --> 38 </tr> 39 </tr> 40 <!-- 表示非表示切り替え --> 41 <tr><!-- ←追加分--> 42 <tr id="secondBox"> 43 <!--<tr> ←削除分--> 44 <th>チーム名:</th> 45 <td><input type="text" class="form-control" placeholder="チーム名"/></td> 46 </tr> 47 <tr> 48 <th>ユーザー名:</th> 49 <td> 50 <select class="custom-select"> 51 <option selected>ユーザー選択</option> 52 <option value="1">User-A</option> 53 <option value="2">User-B</option> 54 <option value="3">User-C</option> 55 <option value="4">User-D</option> 56 <option value="5">User-E</option> 57 </select> 58 </td> 59 <!-- <p>紹介された方のお名前を入力してください。</p></td> --> 60 </tr> 61 </tr> 62 63 </table> 64</form> 65 66<!--スクリプト--> 67<script type="text/javascript"> 68 function entryChange1(){ 69 radio = document.getElementsByName('entryPlan') 70 if(radio[0].checked) { 71 //フォーム 72 document.getElementById('firstBox').style.display = ""; 73 document.getElementById('secondBox').style.display = "none"; 74 //特典 75 //document.getElementById('firstNotice').style.display = ""; 76 }else if(radio[1].checked) { 77 //フォーム 78 document.getElementById('firstBox').style.display = "none"; 79 document.getElementById('secondBox').style.display = ""; 80 //特典 81 //document.getElementById('firstNotice').style.display = "none"; 82 } 83 } 84 85 //オンロードさせ、リロード時に選択を保持 86 window.onload = entryChange1; 87</script> 88

###追記(20180830) 解決したソース

html

1<form class="form-control" action="./score" method="post"> 2 <div> 3 <span>登録種別</span> 4 <label><input type="radio" name="entryPlan" value="hoge1" onclick="entryChange1();" checked="checked" />ユーザー</label> 5 <label><input type="radio" name="entryPlan" value="hoge2" onclick="entryChange1();" />チーム</label> 6 </div> 7 8 <div id="entry_as_user" class="form_contents"> 9 <label>ユーザ名: 10 <input type="text" class="form-control" placeholder="ユーザー名"/> 11 </label> 12 <label>チーム名: 13 <select class="custom-select"> 14 <option selected>チーム選択</option> 15 <option value="1">A-team</option> 16 <option value="2">B-team</option> 17 <option value="3">C-team</option> 18 <option value="4">D-team</option> 19 <option value="5">E-team</option> 20 </select> 21 </label> 22 <button type="submit">SUBMIT_A</button> 23 </div> 24 25 <div id="entry_as_team" class="form_contents"> 26 <label>チーム名: 27 <input type="text" class="form-control" placeholder="チーム名"/> 28 </label> 29 <label>ユーザ名: 30 <select class="custom-select"> 31 <option selected>ユーザー選択</option> 32 <option value="1">User-A</option> 33 <option value="2">User-B</option> 34 <option value="3">User-C</option> 35 <option value="4">User-D</option> 36 <option value="5">User-E</option> 37 </select> 38 </label> 39 <button type="submit">SUBMIT_B</button> 40 </div> 41</form> 42 43<!--スクリプト--> 44<script type="text/javascript"> 45 function entryChange1(){ 46 var eau = document.getElementById('entry_as_user'); 47 var eat = document.getElementById('entry_as_team'); 48 49 radio = document.getElementsByName('entryPlan') 50 if(radio[0].checked) { 51 //フォーム 52 eau.style.display = ""; 53 eat.style.display = "none"; 54 //特典 55 //document.getElementById('firstNotice').style.display = ""; 56 }else if(radio[1].checked) { 57 //フォーム 58 eau.style.display = "none"; 59 eat.style.display = ""; 60 //特典 61 //document.getElementById('firstNotice').style.display = "none"; 62 } 63 } 64 65 //オンロードさせ、リロード時に選択を保持 66 window.onload = entryChange1; 67</script>

css

1.form_contents >label{ 2 display: block; 3}

以上のソースコードを用いることで当初の期待値である、ラジオボタンごとのフォームの切り替え及び登録ボタンの差し替えが可能になりました。

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

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

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

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

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

m.ts10806

2018/08/28 14:43

htmlから始まっているコードにJavaScriptとつけるくらいならコードブロックを分けてHTMLとJavaScript別々にしたほうが違和感がありませんしコードハイライトも適切になって読みやすくなります。ご検討ください。
liveasnotes

2018/08/28 14:57

Windows機上の Chrome 68.0.3440.106 (64-bit), Firefox 61.0.2 (64-bit), IE 11.0.9600.19101 の全てで当該動作は確認できませんでした.確認した環境について詳しくお書きください
moppu

2018/08/28 15:03

環境はchromeで開発環境はcakephp3を使用しています。質問内容としましては、ラジオボタンにチェックを入れた際に、2つフォームを表示させたいことです。
liveasnotes

2018/08/28 15:11

ああ,すみません,寝ぼけてました.display = "";が効いていないんですね?
moppu

2018/08/28 15:15

そうですね。ユーザーのラジオボタンを選択した際はユーザー登録用のフォーム、チームのラジオボタンを選択したときは、チームの登録フォームが2つ表示させるようにしたいのです。
liveasnotes

2018/08/28 15:44

インデントの幅は統一した方が良いです.読みづらいので
x_x

2018/08/29 01:00

まずHTMLを直さないと先にすすめないかと
moppu

2018/08/29 01:21

修正箇所を教えてくださるとありがたいです・・・・。開発者ツールを確認してもどこがおかしいかわからない為にフォームが3つ表示されているので(切り替わらない)・・・。
x_x

2018/08/29 02:56

実際には終了タグは省略可能なので、<tr id="firstBox">の直前に</tr>が補われ、後方にある</tr>が無視されると思いますが、それは意図したものではないでしょう
x_x

2018/08/29 07:09

直す気がない感じですか?
moppu

2018/08/29 08:16

修正中になります。
guest

回答1

0

ベストアンサー

ブラウザの開発者ツールを起動してください.このようになっています
(gifはfirefoxのもの)
イメージ説明
別タブで開けば,原寸大で見れるので,何が起こっているのか分かると思います
tr.firstBoxにはきちんと,jsは効いていますが,idが振られている場所がおかしいです

HTMLを見てみると,

html

1<tr id="firstBox"> 2<tr> 3 <th>ユーザー名:</th> 4 <td><input type="text" class="form-control" placeholder="ユーザー名"/></td> 5</tr>

となっています.

おそらく,

html

1<tr id="firstBox"> 2 <th>ユーザー名:</th> 3 <td><input type="text" class="form-control" placeholder="ユーザー名"/></td> 4</tr>

ではないでしょうか?

開発者ツールを使えばこのようなミスをすぐ見つけられます
開発者ツールの開き方・使い方はOS・ブラウザによって微妙に違うので,詳しいやり方はご自身で調べてみてください.

また,同様のミスを防ぐ工夫として「インデントを整える」ことをおすすめします.
ちょうど開発者ツールのように,タグの入れ子構造を記述することで,閉じタグ忘れや不要な開始タグを見つけやすくなります.あと,Web開発向けのエディタ(AtomやBrackets,VSCodeなど)は,構文エラーの有無を教えてくれます.使ってみてください.


idを振るべきタグは下のタグのようです(これも,インデントを整えておけばすぐ分かる)
うっかりしていました(汗)
liveweaveのリントがはくエラーを消そうとしてこう書きましたが,x_xさんのご指摘の通り,tr要素の直下にtr要素は書けないです.つまり,下のgifのようにやるのは間違いになります
イメージ説明


#追記(20180830)

  • 表組み修正版

html

1<form class="form-control" action="./score" method="post"> 2 <table class="layout-set" border="0" cellspacing="0" cellpadding="0"> 3 <tr> 4 <th>登録種別</th> 5 <td> 6 <label> 7 <input type="radio" name="entryPlan" value="hoge1" onclick="entryChange1();" checked="checked" /> 8 ユーザー 9 </label> 10 <label> 11 <input type="radio" name="entryPlan" value="hoge2" onclick="entryChange1();" /> 12 チーム 13 </label> 14 </td> 15 </tr> 16 </table> 17 <table id="entry_as_user"> 18 <tr> 19 <th>ユーザー名:</th> 20 <td><input type="text" class="form-control" placeholder="ユーザー名"/></td> 21 </tr> 22 <tr> 23 <th>チーム名:</th> 24 <td> 25 <select class="custom-select"> 26 <option selected>チーム選択</option> 27 <option value="1">A-team</option> 28 <option value="2">B-team</option> 29 <option value="3">C-team</option> 30 <option value="4">D-team</option> 31 <option value="5">E-team</option> 32 </select> 33 </td> 34 </tr> 35 <tr> 36 <td><button type="submit">SUBMIT_A</button></td> 37 </tr> 38 </table> 39 <table id="entry_as_team"> 40 <tr> 41 <th>チーム名:</th> 42 <td><input type="text" class="form-control" placeholder="チーム名"/></td> 43 </tr> 44 <tr> 45 <th>ユーザー名:</th> 46 <td> 47 <select class="custom-select"> 48 <option selected>ユーザー選択</option> 49 <option value="1">User-A</option> 50 <option value="2">User-B</option> 51 <option value="3">User-C</option> 52 <option value="4">User-D</option> 53 <option value="5">User-E</option> 54 </select> 55 </td> 56 </tr> 57 <tr> 58 <td><button type="submit">SUBMIT_B</button></td> 59 </tr> 60 </table> 61</form> 62 63<!--スクリプト--> 64<script type="text/javascript"> 65 function entryChange1(){ 66 var eau = document.getElementById('entry_as_user'); 67 var eat = document.getElementById('entry_as_team'); 68 69 radio = document.getElementsByName('entryPlan') 70 if(radio[0].checked) { 71 //フォーム 72 eau.style.display = ""; 73 eat.style.display = "none"; 74 //特典 75 //document.getElementById('firstNotice').style.display = ""; 76 }else if(radio[1].checked) { 77 //フォーム 78 eau.style.display = "none"; 79 eat.style.display = ""; 80 //特典 81 //document.getElementById('firstNotice').style.display = "none"; 82 } 83 } 84 85 //オンロードさせ、リロード時に選択を保持 86 window.onload = entryChange1; 87</script>
  • div版+css

イメージ説明

html

1<form class="form-control" action="./score" method="post"> 2 <div> 3 <span>登録種別</span> 4 <label><input type="radio" name="entryPlan" value="hoge1" onclick="entryChange1();" checked="checked" />ユーザー</label> 5 <label><input type="radio" name="entryPlan" value="hoge2" onclick="entryChange1();" />チーム</label> 6 </div> 7 8 <div id="entry_as_user" class="form_contents"> 9 <label>ユーザ名: 10 <input type="text" class="form-control" placeholder="ユーザー名"/> 11 </label> 12 <label>チーム名: 13 <select class="custom-select"> 14 <option selected>チーム選択</option> 15 <option value="1">A-team</option> 16 <option value="2">B-team</option> 17 <option value="3">C-team</option> 18 <option value="4">D-team</option> 19 <option value="5">E-team</option> 20 </select> 21 </label> 22 <button type="submit">SUBMIT_A</button> 23 </div> 24 25 <div id="entry_as_team" class="form_contents"> 26 <label>チーム名: 27 <input type="text" class="form-control" placeholder="チーム名"/> 28 </label> 29 <label>ユーザ名: 30 <select class="custom-select"> 31 <option selected>ユーザー選択</option> 32 <option value="1">User-A</option> 33 <option value="2">User-B</option> 34 <option value="3">User-C</option> 35 <option value="4">User-D</option> 36 <option value="5">User-E</option> 37 </select> 38 </label> 39 <button type="submit">SUBMIT_B</button> 40 </div> 41</form> 42 43<!--スクリプト--> 44<script type="text/javascript"> 45 function entryChange1(){ 46 var eau = document.getElementById('entry_as_user'); 47 var eat = document.getElementById('entry_as_team'); 48 49 radio = document.getElementsByName('entryPlan') 50 if(radio[0].checked) { 51 //フォーム 52 eau.style.display = ""; 53 eat.style.display = "none"; 54 //特典 55 //document.getElementById('firstNotice').style.display = ""; 56 }else if(radio[1].checked) { 57 //フォーム 58 eau.style.display = "none"; 59 eat.style.display = ""; 60 //特典 61 //document.getElementById('firstNotice').style.display = "none"; 62 } 63 } 64 65 //オンロードさせ、リロード時に選択を保持 66 window.onload = entryChange1; 67</script>

css

1.form_contents >label{ 2 display: block; 3}

投稿2018/08/28 15:22

編集2018/08/29 16:53
liveasnotes

総合スコア1284

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

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

moppu

2018/08/28 15:28

回答ありがとうございます。 gifにあるのですが、チームを選択した場合はユーザーのフォームは消して、2つのフォームだけを表示させるようにしたいのです・・・。 また指摘にあるHTMLを入力した場合、ユーザー名をいれるフォームしか表示されなくなった気がしました。(開発機は今無いため実践できず、明日の朝続きをします)
moppu

2018/08/29 00:36

フォームを2つずつ表示させたい為、入れ替えを行ったのですが反映されず3つ表示されます。 (なぜ入力フォームをプルダウンフォームを入れ替えただけで表示が切り替わらなくなるのかがわからない)
liveasnotes

2018/08/29 03:25

よくよく考えたら,「tr(Table Row: 列)」の中に「tr」があるって意味わからないですね (いつのまにか3次元に(笑 コード直しておきます あと確認してほしいのですが,JSで操作しているのは,#firstBoxと#secondBoxだけですよね? であれば,操作していない「tr」のdisplayプロパティの値は変わりませんから,その場に残り続けても何らおかしくないのではないでしょうか? あと,「切り替わらない」というのがよく分からないので,どのラジオボタンを選択したときに,どンな形式のどの項目が表示されてほしいのかを箇条書きでお伝えいただけないでしょうか.よろしくお願いします
moppu

2018/08/29 03:44

やりたいこととしましては、ラジオボタンでフォームを切り替えることです。 さきほど変更後のコードを上げましたように、 ・”ユーザー”のラジオボタンを選択すると、ユーザー名をいれるフォームと、登録してあるチームを選択するプルダウンが表示されてほしいです。 ・”チーム”のラジオボタンを選択すると、チーム名をいれるフォームと、登録してあるユーザーを選択するプルダウンが表示されてほしいです。 ※登録されてあるとは将来的にDBから取得したい為です。 現在はフォームのみの切り替えが実現することが期待値です。 ご不明点あれば指摘お願いします。
moppu

2018/08/29 06:07

追記ありがとうございます。 ラジオボタンに対する挙動は求めていたものになりました。 また、ラジオボタンごとに登録ボタンを挿入する箇所はどこになるかわかりますか? (自分で挿入してみたところフォーム下に配置できなかった為) ・ユーザー選択時はユーザーの登録ボタン ・チーム選択時はチームの登録ボタンをフォームの下に配置したいのですが・・・。 (また、いまではないですが将来的にプルダウンの内容はDBから取得することは可能でしょうか?) 何度も質問、申し訳ございません。もしよろしければお願いします。
liveasnotes

2018/08/29 07:07

>ラジオボタンごとに登録ボタンを挿入する箇所 表示非表示はjsでやっているので,マークアップがおかしくない位置に,新たにtrを挿入すればよいだけです 全体の基本構造は, <form>  <table>   <!--ユーザ登録-->   <tr>~~~</tr>   <tr>~~~</tr>   <!--チーム登録-->   <tr>~~~</tr>   <tr>~~~</tr>  </table> </form> となっていたと思いますが,これならtrを入れるべき場所は ユーザ登録,チーム登録の最後の行が適していると思われます 尚,フォームを作る際はテーブルを用いる必要はありません cf.「初めての HTML フォーム」(https://developer.mozilla.org/ja/docs/Learn/HTML/Forms/Your_first_HTML_form) そういった意味でも,要素を挿入する位置はそこまで深く考えなくても大丈夫です(もちろん,form要素の中に配置しておく方が自然ですが) 改めて言いますが,要素の表示非表示はjsでやっています(あなたがそのようなコードを書いています) つまり,要素を追加しただけでは,ラジオボタン押下による挙動は,質問者さんの意図するものとならないことに留意してください(jsを書き換える必要があります) もし,これが面倒であるなら, <form>  <table>   <!--ユーザ登録-->   <tr>~~~</tr>   <tr>~~~</tr>  <table>  </table>   <!--チーム登録-->   <tr>~~~</tr>   <tr>~~~</tr>  </table> </form> のように書き換え,trからtableに対してidを振り直し,そのidで表示非表示を切り替えるようにすれば,table内の要素を追加しても,jsを書き換える必要はなくなります >プルダウンの内容はDBから取得することは可能でしょうか 可能です(これができなければ多くのWebサービスは貧弱なものとなっていたでしょう) 詳しい方法については別投稿で質問していただいた方が良いかと思います
moppu

2018/08/29 08:16

回答ありがとうございます。 >これならtrを入れるべき場所は ユーザ登録,チーム登録の最後の行が適していると思われます 一番したに挿入すると一番上に表示され、期待通りの挙動にならない為質問させていただきました。 (これはcssの問題でしょうか?) >尚,フォームを作る際はテーブルを用いる必要はありません DivなどにJSのIDを紐づけるような形で、ということでしょうか? >要素を追加しただけでは,ラジオボタン押下による挙動は,質問者さんの意図するものとならないことに留意してください 設計上テーブルにIDをつけるのか、今のような構造のほうがいいのか、というのは設計上ありますでしょうか? お手数ですが、お時間ありましたらお願い致します。
liveasnotes

2018/08/29 16:54 編集

>cssの問題でしょうか HTMLとJSの問題です.CSSはまだ関係しません >DivなどにJSのIDを紐づけるような形で です >設計上テーブルにIDをつけるのか、今のような構造のほうがいいのか、というのは 個人的には,ネストが深くなりやすい「表組み」は,あまり好きではありませんが,表組みを手早く作りたいならテーブルで良いと思います. ただ,今後ビジュアルをいじりたいと思っているなら,テーブルを使わない方が自由度は高いです (表組みだと,セルごとに仕切られてしまうので) 回答の方に,またコードを追記しておくので,何をどうしたのか確認してみてください --- エラーが出て追記できなかったので,回答から過程の部分を消しました
moppu

2018/08/30 01:47

div+jsの方法を試してみたところうまく動作致しました。今後のビジュアル面などを考えこちらを使います。ありがとうございます。 また、登録ボタンをユーザー用とチーム用と分けているのですが、これはformタグにactionを書いてもわけることは不可能ですよね…?
moppu

2018/08/30 02:58

上記につきましては、onclickを使いjquryを用いることで多分解決できました。
liveasnotes

2018/08/30 03:11

フォームの取り扱いを分ける方法は主に2つあります ①サーバ側で処理する <input type="radio" name="registertype" value="asuser" required> <input type="radio" name="myradio" value="asteam"> <input name="username" value="tarou"> <input name="selectedteamname" value="ABC"> <input name="teamname" value=""> <input name="selectedusername" value=""> という要素があるフォームの場合, 「?registertype=asuser&username=tarou&selectedteamname=ABC」というデータが送信されます サーバ側で処理する際に,このname属性の値で処理を振り分ければよいです あるいは,そもそもフォームを2つに分け,送信先のスクリプトもそれぞれ別のものにするという手もあります ・複数タブをHTML,CSSで実装するデモ: https://thimbleprojects.org/liveasnotes/532250/ (リンク先右上の「リミックス」ボタンでコードの閲覧・編集可) ②クライアントサイド(ブラウザ上)で処理する name属性で振り分ける処理をクライアントサイドで行います 既にプラグインを試しているようなので,省略します 尚,クライアントサイドでのスクリプト実行の際には気を付けるべきことがあります 登録機能程度であればさほど問題ないでしょうが,データベースの「書き換え」や,ログイン状態の振り分け等の処理はクライアントサイドで実行するスクリプトには書かないでください.クライアントサイドのスクリプトはいくらでもいじれます(少し前に流行したクッキークリッカーは好例) あと,言い忘れていましたが,選択・記入必須の項目にはrequired属性を付けておくことをおすすめします
moppu

2018/08/30 04:26

2パターンの照会+属性のおすすめ、ご回答ありがとうございます。 ・登録ボタンを押下後にDBにデータを収納するようにするには、登録ボタン→処理ページ遷移→完了トースト表示 などの流れですかね?(処理ページは表示せずトーストを表示したい) 上記は可能ですか?
liveasnotes

2018/08/30 04:28

あ,これも言い忘れてました すでに解決した部分があれば,質問欄を編集し,追記を行ってください でないと,他の人からは,何も進んでいないように見えてしまいます また,1つの投稿につき,課題は1つに絞るのが良いです でないと,ずるずると長引いてしまい,内容が複雑化したり具体化し過ぎて,他の人にとっては全く役に立たない内容になってしまうことが多々あるからです 質問内容を単純化・抽象化することで,回答者が自身の知見を再確認できるだけでなく,解決方法を知りたくてクリップしたり,ネット検索でたどり着いた方たちがその技術について深く学ぶのに役立てることもできます 課題が1つ解決したら解決済みにして,新しい疑問は改めて投稿し,一連の質問のリンクを参考用に貼っておく,というのが良いようです もちろん,元の質問と技術的に近い話題であれば,新たに投稿し直す必要はありません ただ,teratailがただのQ&Aサイトだけでなく,ノウハウの共有サイトの側面をも強く持っていることは意識してください 質問・回答ともに,役立つ情報となるよう心がけましょう
liveasnotes

2018/08/30 04:32

>処理ページは表示せずトーストを表示したい 処理はいくらでも隠せます(だからワンクリック詐欺とかその発展形がある) トースト出すのも,submit()されたらdivにclassを付与する,とかのパターンで出来ると思います ちょっと投稿が長くなってきましたし,他の方が状況を把握しづらいと思うので,このあたりの実装については,一度ご自身でトライした上で,改めて分からないところを質問するようにしてください
moppu

2018/08/30 04:43

当初の質問の期待値を満たせたため終了とさせていただきます。 長い間、細かいところまでの指摘、指示ありがとうございました。 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問