🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

2回答

791閲覧

substrを使って同一の選択をした際にアラートを出したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/03/19 12:43

編集2021/03/20 06:36

前提・実現したいこと

科目登録のシステムを作成しているのですが、同一の科目を選択している場合、アラートを出したいと考えているのですが、substrを使った判定がうまくいきませんでした。
(例: 0130 2年現代文Ba・月3水1と0131 2年現代文Bb・月4水2を選択している際に、同じ2年現代文を選択しているため、アラートを出したい。)

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

同一科目を選択した際に、科目番号をsubstrを使用して抜き出したいが、そもそもそのためのfor文が動かない。

該当のソースコード

javascript

1function submit() { 2 var number = 1; 3 var check = 1; 4 var input = document.getElementById("sub").value; 5 var output = document.getElementById(number).innerHTML; 6 for (number = 1; output != ""; number++) { 7 output = document.getElementById(number + 1).innerHTML; 8 9 } 10 for (check = 1; check <= 13; check++) { 11 console.log(check); 12 if (output.substr(0, 3) == input.substr(0, 3)) { 13 alert(同じ科目は登録しないでください); 14 exit; 15 16 } 17 } 18 document.getElementById(number).innerHTML = input;

HTML

1<select id="sub"> 2 <option value="notselect"></option> 3 <option value="01302年現代文Ba・月3水1">0130 2年現代文Ba・月3水1</option> 4 <option value="01312年現代文Bb・月4水2">0131 2年現代文Bb・月4水2</option> 5 <option value="01322年現代文Bc・月4金1">0132 2年現代文Bc・月4金1</option> 6 <option value="01332年現代文Bd・火2木2">0133 2年現代文Bd・火2木2</option> 7 <option value="01342年現代文Be・火4木2">0134 2年現代文Be・火4木2</option> 8 <option value="01352年現代文Bf・水1木4">0135 2年現代文Bf・水1木4</option> 9 <option value="01362年現代文Bg・水2金1">0136 2年現代文Bg・水2金1</option> 10<button onclick="submit()">追加</button> 11<table border="1" id="sublist"> 12 <tr> 13 <th>科目リスト</th> 14 </tr> 15 <tr> 16 <td> 17 <div id=1></div> 18 </td> 19 </tr> 20 <tr> 21 <td> 22 <div id=2></div> 23 </td> 24 </tr> 25 <tr> 26 <td> 27 <div id=3></div> 28 </td> 29 </tr>

補足情報

substrの式自体はうまく動きました。
また、上のselectの中にある選択肢は一部を抜粋したもので、実際はさらに選択肢があります。なので、最大13の選択肢の中から選ぶようにしたいと考えています。

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

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

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

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

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

guest

回答2

0

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const sub=document.querySelector('#sub'); 4 document.querySelector('#btn').addEventListener('click',()=>{ 5 if(sub.value=="notselect"){ 6 alert('not selected!'); 7 }else if([...document.querySelectorAll('#sublist tbody td')].map(x=>x.textContent).includes(sub.value)){ 8 alert('already exists'); 9 }else{ 10 document.querySelector('#sublist tbody').appendChild( 11 [Object.assign(document.createElement('td'),{textContent:sub.value})].reduce((x,y)=>{ 12 x.appendChild(y); 13 return x; 14 },document.createElement('tr')) 15 ); 16 } 17 }); 18}); 19</script> 20 21<select id="sub"> 22<option value="notselect"></option> 23<option value="01302年現代文Ba・月3水1">0130 2年現代文Ba・月31</option> 24<option value="01312年現代文Bb・月4水2">0131 2年現代文Bb・月42</option> 25<option value="01322年現代文Bc・月4金1">0132 2年現代文Bc・月41</option> 26<option value="01332年現代文Bd・火2木2">0133 2年現代文Bd・火22</option> 27<option value="01342年現代文Be・火4木2">0134 2年現代文Be・火42</option> 28<option value="01352年現代文Bf・水1木4">0135 2年現代文Bf・水14</option> 29<option value="01362年現代文Bg・水2金1">0136 2年現代文Bg・水21</option> 30</select> 31<button id="btn">追加</button> 32<table border="1" id="sublist"> 33<thead> 34<tr> 35<th>科目リスト</th> 36</tr> 37</thead> 38<tbody> 39</tbody> 40</table>

上限あり

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const max=3; 4 const sub=document.querySelector('#sub'); 5 document.querySelector('#btn').addEventListener('click',()=>{ 6 if(sub.value=="notselect"){ 7 alert('not selected!'); 8 }else if([...document.querySelectorAll('#sublist tbody td')].map(x=>x.textContent).includes(sub.value)){ 9 alert('already exists'); 10 }else if([...document.querySelectorAll('#sublist tbody td')].length>=max){ 11 alert(`can't regist anymore`); 12 }else{ 13 document.querySelector('#sublist tbody').appendChild( 14 [Object.assign(document.createElement('td'),{textContent:sub.value})].reduce((x,y)=>{ 15 x.appendChild(y); 16 return x; 17 },document.createElement('tr')) 18 ); 19 } 20 }); 21}); 22</script> 23 24<select id="sub"> 25<option value="notselect"></option> 26<option value="01302年現代文Ba・月3水1">0130 2年現代文Ba・月31</option> 27<option value="01312年現代文Bb・月4水2">0131 2年現代文Bb・月42</option> 28<option value="01322年現代文Bc・月4金1">0132 2年現代文Bc・月41</option> 29<option value="01332年現代文Bd・火2木2">0133 2年現代文Bd・火22</option> 30<option value="01342年現代文Be・火4木2">0134 2年現代文Be・火42</option> 31<option value="01352年現代文Bf・水1木4">0135 2年現代文Bf・水14</option> 32<option value="01362年現代文Bg・水2金1">0136 2年現代文Bg・水21</option> 33</select> 34<button id="btn">追加</button> 35<table border="1" id="sublist"> 36<thead> 37<tr> 38<th>科目リスト</th> 39</tr> 40</thead> 41<tbody> 42</tbody> 43</table>

投稿2021/03/20 04:12

編集2021/03/20 11:25
yambejp

総合スコア116681

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

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

退会済みユーザー

退会済みユーザー

2021/03/20 06:40

返信が遅くなってしまい申し訳ありません。 質問の一部を修正したので、ご覧いただいた後に、改めて回答いただけると幸いです。
退会済みユーザー

退会済みユーザー

2021/03/20 07:16

また、elseifやelseで使われているxやyはどんな変数なのでしょうか。
yambejp

2021/03/20 08:09 編集

なにか追加仕様必要なのでしょうか?
退会済みユーザー

退会済みユーザー

2021/03/20 08:59

補足にも書かせていただいたのですが、上のselectの中身は全体の一部を、冗長だと考えて一部抜粋したもので、本来のselectの中身は100以上あります。また、科目は最大で13個登録できるので、13個以降は、選択しても画面に表示されないように、あらかじめ題名を含めた14個のthを作っており、innerHTMLを使って追加や書き換えをしたいと考えています。
yambejp

2021/03/20 11:26

上限設定バージョン追記しておきました このUIだと削除機能もあった方がいいのと、すでに選んだものを わかるようにしたほうがよいかもしれません
guest

0

for (check = 1; check == 13; check++) {

これではループしません
for の2つ目の論理式(check == 13)が真でないと、forの中身は実行しませんね

#で、これが真になりようがないので、ループしない

投稿2021/03/19 12:47

編集2021/03/19 12:55
y_waiwai

総合スコア88038

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

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

退会済みユーザー

退会済みユーザー

2021/03/19 13:17

forを(check = 1; check <= 13; check++) {に修正し、selectでも最初の3桁が同一のものを選択するようにしました。しかし、checkが13まで上がる間にアラートが出ずにループが終了してしまいました。
y_waiwai

2021/03/19 13:22

提示のコードでは閉じるカッコがないなど不完全なものなので、なんとも言いようがないです。 まあ、そうなるんでしょうね、としか。
退会済みユーザー

退会済みユーザー

2021/03/19 13:30

完全でないところ、うまくいかない原因を教えていただけないでしょうか。
y_waiwai

2021/03/19 13:36

そのforのところで、outputには何が入ってるのか調べてみては。
退会済みユーザー

退会済みユーザー

2021/03/19 13:40

もっとストレートに答えていただけませんか。
y_waiwai

2021/03/19 13:43

すでに、この質問からは外れてますよ。 どうにかしたいなら、ちょっとは努力しましょう
退会済みユーザー

退会済みユーザー

2021/03/19 13:45

自分で解決できるなら、最初からコメントに書いたりしません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問