前提・実現したいこと
プログラミング初心者です。
HTML内のテーブルに設置したラジオボタンが選択されたときに、選択されたラジオボタンと同じ行にあるtdの値を取得するやり方がわかりません。
やりたいことは、JavaScriptにてラジオボタンを選択しボタンを押下後、選択された行と同じ行にある値を取得し、その内容によってエラーメッセージの表示・非表示を行いたいです。
<追記>
下記コードにて具体例を説明させていただきます。
htmlで作成したテーブルの3番目、もものラジオボタンを選択後に「発送取り消しボタン」を押下した場合、ももはすでに「取り消し済み」になっているため、初期段階では非表示にしている「【発送中】を選択してください。」というエラーメッセージを表示したいです。
そのため、Javascriptにてラジオボタンで選択された行の「発送状況」の値を取得し、該当のif文内に「発送状況が「取り消し済み」だったら」という条件を記載したいです。
該当のソースコード
HTML
1<table> 2 <tr> 3 <th>ラジオボタン</th> 4 <th>果物の名前</th> 5 <th>値段</th> 6 <th>発送状況</th> 7 </tr> 8 9 <tr th:each="fluit:${session.fluits}"> 10 <td><input type="radio" name="fluitRadio" th:value="${fluit.fluitId}" /></td> 11 <td th:text="${fluit.name)}"></td> 12 <td th:text="${fluit.fee}"></td> 13 <td th:text="${fluit.stock} == 1?[取り消し済み]:[発送中]"></td> 14 </tr> 15 </table> 16 <!-- ▼▼▼▼▼▼▼発送削除ボタン▼▼▼▼▼▼▼ --> 17 <!-- ラジオボタン未選択の場合はエラーメッセージ表示 --> 18 <div id="selectradio">ラジオボタンを選択してください。</div> 19 <!-- 取り消し済みを選択した場合はエラーメッセージ表示 --> 20 <div id="gonow">【発送中】を選択してください。</div> 21 22 <input onclick="return MoveCheck()" type="submit" name="reset" 23 id="checkButton" value="発送取り消し" />
Javascript
1function MoveCheck() { 2//エラーメッセージを初期段階で未表示にする 3document.getElementById("selectradio").style.display ="none"; 4document.getElementById("gonow").style.display ="none"; 5var flag = 0; 6//入力チェック 7if (document.form1.fluitRadio.length) { 8 flag = 1; 9 var i; 10 for (i = 0; i < document.form1.fluitRadio.length; i++) { 11 if (document.form1.fluitRadio[i].checked) { 12 flag = 0; break; 13 } 14 } 15} else { 16 if (!document.form1.fluitRadio.checked) { 17 flag = 1; 18 } 19} 20 21if (flag) { 22//ラジオボタン未選択の場合の処理 23 selectradio.style.display =""; //「ラジオボタンを選択してください」を表示 24 return false; // 送信を中止 25} else { 26 if(”【ここに選択されたラジオボタンと同じ行にあるfluit.areaが「取り消し済み」だった場合を書きたいです】”){ 27 gonow.style.display ="";//「【発送済み】のものを選択してください」を表示 28}else{ 29 var checked = confirm("発送を取り消しますか?"); 30 if (checked == true) { 31 alert("取り消しました"); 32 return true; 33 } else { 34 alert("キャンセルしました"); 35 return false; 36 } 37 } 38} 39}
Controllerとテーブルの中身
fluitという配列に、以下のように果物の情報が3つずつ入っていたとします。
(html内にて、発送状況が1なら取り消し済み、0なら発送中と表示)
Controllerでは選択された行の発送状況が0だった場合は1にする処理を書いています。
一方で発送状況が1だった場合は何も処理を行わないようにしています。
|ラジオボタン|果物の名前|値段|発送状況|
|:--|:--:|--:|
|ラジオボタン|りんご|100|0|
|ラジオボタン|ぶどう|120|0|
|ラジオボタン|もも|200|1|
期待する処理結果
・ラジオボタンを何も選択しなかった場合
→初期は非表示にしている「ラジオボタンを選択してください。」というメッセージを表示。処理はされない。
・ももの行のラジオボタンを選択後に発送取り消しボタンを押下した場合
→初期は非表示にしている「【発送中】を選択してください。」というメッセージを表示。処理はされない。
・リンゴの行のラジオボタンを選択後に発送取り消しボタンを押下した場合
→「発送を取り消しますか」というダイアログの後、その選択肢によって「取り消しました。」「キャンセルしました。」というダイアログを表示し、Controllerで処理を行う。処理後は「取り消し済み」という表記に変更。
実際の処理結果
・ラジオボタンを何も選択しなかった場合
→初期は非表示にしている「ラジオボタンを選択してください。」というメッセージを表示。
・ももの行のラジオボタンを選択後に発送取り消しボタンを押下した場合
→メッセージもダイアログも表示されず何も変化しない。
・リンゴの行のラジオボタンを選択後に発送取り消しボタンを押下した場合
→ダイアログがないままControllerに処理が送られ、「発送状況」の値が0から1に変更される。そのためビューでも「取り消し済み」という表記に変更。
おそらく、ラジオボタンの入力チェックはできていますが、選択された行の発送状況を区別できていないため、発送中でも取り消し済みでも処理が送られているようです。
以上を踏まえての質問内容
3つ目のラジオボタン(もも)を選択しボタンを押下したときに、選択された行の発送状況が「発送中」であるか「取り消し済み」であるかを取得し、if文にて「「取り消し済み」だった場合」という条件を書くにはどのようにしたらよいですか?
また、使用すif文に記載する条件は
if( 変数(選択された行の発送状況) == 1){
}
となるのか、
if( 変数(選択された行の発送状況) == "取り消し済み"){
}
とすればよいのかも教えていただきたいです。
今回、Controllerでメッセージ表記する方法でもよいのですが、ダイアログを使用する処理もあるため、できればJavascriptにて値を取得してメッセージの表記をしたいです。
再度の掲載、また編集になり、ご迷惑をおかけし申し訳ございません。
また拙い文章と理解度での質問になってしまっていること、重ねてお詫び申し上げます。
お力添えをお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/06/19 14:32 編集
2021/06/19 15:34
2021/06/19 15:42
退会済みユーザー
2021/06/19 17:13