回答編集履歴

2 修正

yambejp

yambejp score 86535

2016/08/19 16:40  投稿

そうとうひどいソースなので以下見なおしてください
- submitのボタンとformのonsubmitに両方checkを関連付けない
- もしサブミットボタンのonclickを有効にするならreturn checkで受けてください
- もしformのonsubmitを有効にするなら意味のない引数を渡さない
- checkは戻り値trueかfalseを返すように
- checkの中でsubmitしない
- if ((form.elements[word].id=="vl") && (form.elements[word].value=="")
何をしたいのでしょうか?ついでにカッコの数も違うし・・・
- vlという同じidを複数のタグに振らない
- document.getElementById("vl")をformとみなしてますが、フォームじゃない
- for構文はなるべくfor(i=初期値;i<上限値;i++)的な書き方にして
# 追記
# 追記(修正)
ソースを修正する気があまりなさそうなのでたとえばこんな感じで
チェックしたい項目をリスト化しておいたほうがよいでしょう
文字数制限や日本語名などリスト化しました
```javascript
<script>
function check(f) {
 var l=["name","comment"];
 for(var i in l){
   if (f.elements[l[i]].value==="") {
     alert("ERROR");
 var bbs=f.elements["bbs"];
 for(var i=0;i< bbs.length;i++){
   if( bbs[i].value==="delete" && bbs[i].checked){
     return true;
   }
 }
 var list=[
   {"name":"name","kname":"名前","minlength":1,"maxlength":10},
   {"name":"comment","kname":"コメント","minlength":1,"maxlength":100},
   ];
 for(var i=0;i<list.length;i++){
   var len=f.elements[list[i]["name"]].value.length;
   if(len<list[i].minlength || len>list[i].maxlength) {
     alert(list[i].kname+"は"+list[i].minlength +"文字以上"+ list[i].maxlength+"文字以下");
     return false;
   }
 }
 return true;
}
</script>
```
```HTML
<form method="post" onsubmit="return check(this);">
名前:<input type="text" name="name"><br>
内容:<textarea name="comment" cols="30" rows="3"></textarea><br>
<input type="radio" name="bbs" value="post" checked>投稿
<input type="radio" name="bbs" value="update">更新
<input type="radio" name="bbs" value="delete">削除<br>
<input type="submit" value="投稿">
</form>
```
1 追記

yambejp

yambejp score 86535

2016/08/19 15:20  投稿

そうとうひどいソースなので以下見なおしてください
- submitのボタンとformのonsubmitに両方checkを関連付けない
- もしサブミットボタンのonclickを有効にするならreturn checkで受けてください
- もしformのonsubmitを有効にするなら意味のない引数を渡さない
- checkは戻り値trueかfalseを返すように
- checkの中でsubmitしない
- if ((form.elements[word].id=="vl") && (form.elements[word].value=="")
何をしたいのでしょうか?ついでにカッコの数も違うし・・・
- vlという同じidを複数のタグに振らない
- document.getElementById("vl")をformとみなしてますが、フォームじゃない
- for構文はなるべくfor(i=初期値;i<上限値;i++)的な書き方にして
- for構文はなるべくfor(i=初期値;i<上限値;i++)的な書き方にして
# 追記
ソースを修正する気があまりなさそうなのでたとえばこんな感じで
チェックしたい項目をリスト化しておいたほうがよいでしょう
```javascript
<script>
function check(f) {
 var l=["name","comment"];
 for(var i in l){
   if (f.elements[l[i]].value==="") {
     alert("ERROR");
     return false;
   }
 }
 return true;
}
</script>
```
```HTML
<form method="post" onsubmit="return check(this);">
名前:<input type="text" name="name"><br>
内容:<textarea name="comment" cols="30" rows="3"></textarea><br>
<input type="radio" name="bbs" value="post" checked>投稿
<input type="radio" name="bbs" value="update">更新
<input type="radio" name="bbs" value="delete">削除<br>
<input type="submit" value="投稿">
</form>
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る