今必須チェックのスクリプトを組んでいます。
プルダウン項目の必須チェックを行っているところで、項目を選択しても「必須入力です」というアラートが出てしまいます。
ソースは以下参照です
<!--
function hissuCheck(frm) {
/* 必須入力のname属性 */
var paramArray = Array(23個あるが字数制限のため省略)
/* 必須入力アラート用 */
var alrtArray = Array(23個あるが字数制限のため省略);
/* 配列長 */
var len = paramArray.length;
for(i=0; i<len; i++) {
var obj = frm.elements[paramArray[i]];
if(obj.type == "text") {
if(obj.value == "") {
alert(alrtArray[i]+"は必須入力です");
frm.elements[paramArray[i]].focus();
return false;
}
} else if (obj.type == "select") {
for(varSelected=0, j=0; j<obj.length; j++) {
/*選択されていたらvarSelectedフラグをプラス*/
if(obj[j].selected)varSelected++;
}
if(varSelected == "") {
alert(alrtArray[i]+"は必須入力です");
return false;
}
} else {
for(varChecked=0, k=0; k<obj.length; k++) {
.....以下省略
}
}
}
return true;
}
// -->
HTML箇所も書きたかったのですが、ちょっとソースが長くなってご迷惑をおかけしてしまうと思い、割愛させて頂きました。
もし必要であれば一言頂ければと思います。
忙しい中すいませんが、どなたかご教授宜しくお願いします。
No.6ベストアンサー
- 回答日時:
#4,5です。
for(varChecked=0, k=0; k<obj.length; k++)の前にalert(obj[0].type);をいれて、まずオブジェクトが確実に参照されているか確認してみてください。
こちらで試したものはうまくいきました。
サンプル載せときます。
インデントは全角空白で置き換えてますのでご注意ください。
----------
<html>
<head>
<title> 必須チェック </title>
<script type="text/javascript">
<!--
function hissuCheck(frm) {
/* 必須入力のname属性 */
var paramArray = Array("txt","color1","color2");
/* 必須入力アラート用 */
var alrtArray = Array("txt","color1","color2");
/* 配列長 */
var len = paramArray.length;
for(i=0; i<len; i++) {
var obj = frm.elements[paramArray[i]];
alert(obj.type);
if(obj.type == "text") {
if(obj.value == "") {
alert(alrtArray[i]+"は必須入力です");
frm.elements[paramArray[i]].focus();
return false;
}
} else if (obj.type == "select-one" || obj.type == "select-multi") {
for(varSelected="", j=0; j<obj.options.length; j++) {
if(obj.options[j].selected)varSelected+=obj.options[j].value;
}
if(varSelected == "") {
alert(alrtArray[i]+"は必須入力です");
return false;
}
} else {
alert(obj[0].type);
for(varChecked=0, k=0; k<obj.length; k++) {
if(obj[k].type == "checkbox") {
/*選択されていたらvarCheckedフラグをプラス*/
if(obj[k].checked)varChecked++;
}
}
alert(varChecked);
if(varChecked == 0) {
alert(alrtArray[i]+"は必須入力です");
return false;
}
}
}
return false;
}
// -->
</script>
</head>
<body>
<form onsubmit="hissuCheck(this);">
<p><input type="text" name="txt" /></p>
<p>
<select name="color1">
<option value="">-- 選択してください --</option>
<option value="白">ホワイト</option>
<option value="赤">レッド</option>
<option value="黄">イエロー</option>
<option value="青">ブルー</option>
<option value="緑">グリーン</option>
</select>
</p>
<p>
<input type="checkbox" name="color2" value="白">ホワイト</input>
<input type="checkbox" name="color2" value="赤">レッド</input>
<input type="checkbox" name="color2" value="黄">イエロー</input>
<input type="checkbox" name="color2" value="青">ブルー</input>
<input type="checkbox" name="color2" value="緑">グリーン</input>
</p>
<p><input type="submit" value="送信する"></p>
</form>
</body>
</html>
----------
いつもありがとうございます。
>for(varChecked=0, k=0; k<obj.length; k++)の前にalert(obj[0].type);をいれて、まずオブジェクトが確実に参照されているか確認してみてください。
確認してみたところアラートは表示されず、for文等はスルーされて送信されてしまいました。っていうことはオブジェクトがうまく参照できてないってことでしょうか。Kuppycatさんとのソースを比較してもあまり違いがないような気がするのですが…
No.7
- 回答日時:
<form onsubmit="REQUIREDCheck(this);">
<fieldset>
<legend>テキスト入力</legend>
<fieldset>
<legend>任意</legend>
<input type="text" name="txt0">
<input type="text" name="txt1">
</fieldset>
<fieldset>
<legend>必須</legend>
<input type="text" name="txt2">
<input type="text" name="txt3">
</fieldset>
</fieldset>
<fieldset>
<legend>選択項目</legend>
<select name="select0">
<option value="">必須</option>
<option value="0">項目0</option>
<option value="1">項目1</option>
<option value="2">項目2</option>
</select>
<select name="select1">
<option value="">任意</option>
<option value="0">項目0</option>
<option value="1">項目1</option>
<option value="2">項目2</option>
</select>
</fieldset>
<fieldset>
<legend>チェック項目</legend>
<fieldset>
<legend>任意</legend>
<input type="checkbox" name="check0" value="0">項目0
<input type="checkbox" name="check0" value="1">項目1
<input type="checkbox" name="check0" value="2">項目2
</fieldset>
<fieldset>
<legend>必須</legend>
<input type="checkbox" name="check1" value="0">項目0
<input type="checkbox" name="check1" value="1">項目1
</fieldset>
<fieldset>
<legend>チェック項目</legend>
<fieldset>
<legend>任意</legend>
<input type="radio" name="radio0" value="0">項目0
<input type="radio" name="radio0" value="1">項目1
<input type="radio" name="radio0" value="2">項目2
</fieldset>
<fieldset>
<legend>必須</legend>
<input type="radio" name="radio1" value="0">項目0
<input type="radio" name="radio1" value="1">項目1
</fieldset>
</fieldset>
<p><input type="submit" value="送信する"></p>
</form>
<script>
REQUIRED = new Array('txt2','txt3','select0','check1','radio1')
function REQUIREDCheck(Form){
for(var i=0;i<REQUIRED.length;i++){
if(REQUIRED[i].indexOf('txt') != -1){
if(Form.elements[REQUIRED[i]].value == ""){alert(REQUIRED[i]+'は必須です')}
}else if(REQUIRED[i].indexOf('select') != -1){
if(Form.elements[REQUIRED[i]].value == ""){alert(REQUIRED[i]+'は必須です')}
}else if(REQUIRED[i].indexOf('check') != -1){
flag=false
for(var j=0;j<Form.elements[REQUIRED[i]].length;j++){
if(Form.elements[REQUIRED[i]][j].checked){flag=true}
}
if(!flag){alert(REQUIRED[i]+'は必須です')}
}else if(REQUIRED[i].indexOf('radio') != -1){
flag=false
for(var j=0;j<Form.elements[REQUIRED[i]].length;j++){
if(Form.elements[REQUIRED[i]][j].checked){flag=true}
}
if(!flag){alert(REQUIRED[i]+'は必須です')}
}
}
}
</script>
No.5
- 回答日時:
#4です。
チェックボックスのほうですが、
if(obj.type == "checkbox") {
を
if(obj[k].type == "checkbox") {
に変えてください。
forで回してるカウンタをインデックスに付けないと"undefined"になっちゃいますよ。
早速の返事ありがとうございます~~!
ご指摘どおりに変更してみたのですが、2・3・・・・・個チェックつけても「必須です」というアラートが出てしまいます。
まさにセレクトの箇所と同じ症状です…
せっかく回答頂いたのにすいません…
No.4
- 回答日時:
Valueで見たらどうでしょうか。
for(varSelected=0, j=0; j<obj.options.length; j++) {
/*選択されていたらvarSelectedフラグをプラス*/
if(obj[j].selected)varSelected++;
}
を
for(varSelected="", j=0; j<obj.options.length; j++) {
if(obj.options[j].selected)varSelected+=obj.options[j].value;
}
と変えてみてください。
あと、試した<Selete>のサンプルを以下に書いておきます。
----------
<select name="color1">
<option value="">-- 選択してください --</option>
<option value="白">ホワイト</option>
<option value="赤">レッド</option>
<option value="黄">イエロー</option>
<option value="青">ブルー</option>
<option value="緑">グリーン</option>
</select>
----------
ありがとうございます!
うまくいきました~~!!!なんとお礼を言えばいいのか…ホントに一日中悩んでいたので…
ですがセレクトの必須チェックの後にチェックボックスの必須チェックをする予定なのですが、それもうまくいってませんでした…(泣
最初に投稿したソースの「以下省略部分」を追記します
}
} else {
for(varChecked=0, k=0; k<obj.length; k++) {
if(obj.type == "checkbox") {
/*選択されていたらvarCheckedフラグをプラス*/
if(obj[k].checked)varChecked++;
}
}
if(varChecked == 0) {
alert(alrtArray[i]+"は必須入力です");
return false;
}
どこかおかしい箇所ありますでしょうか?
質問が重なってしまって申し訳ないですが宜しくお願いします
No.2
- 回答日時:
obj.type=="select" という判定も間違っていました。
その為 else ~.....以下省略 の部分が動作しているようです。
selectの場合は<select>のmultiple属性の指定によって
obj.type == "select-one" または
obj.type == "select-multi" または
obj.type.match("^select-")
と、判定する必要があるようです。
http://1106.suac.net/johoB/JavaScript/jscripts.h …
ありがとうございます。
3通りのパターンを記述してやらないとだめってことでしょうか?
何か例みたいなものがあるとわかりやすいのですが…
すいません、googleとかで調べてみたんですがわかりませんでした
No.1
- 回答日時:
select項目のチェックをするforループがおかしいです。
select オブジェクトの子要素であるoptionsの内容を調べてチェックすれば大丈夫だと思います。
for(varSelected=0, j=0; j<obj.options.length; j++) {
if(obj.options[j].selected)varSelected++;
早速の返事ありがとうございます。
ご指摘どおりに修正して変更してみたのですが…
無理でした。
選択しても「選択してください」という旨のアラートが出てしまいます。ってことは選択したことを認識していないということになりますよね…なぜなんでしょうか…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
Selectボックスの一覧表示方法
-
select要素のvalueを配列で取得...
-
動的なセレクトボックスの生成...
-
JavascriptからSQLへ繋ぎ方が分...
-
selectを変更不可にしたい
-
JavaScriptで<select>の<option...
-
VBScriptでHTMLのセレクトボッ...
-
console.logがどうしても2つ機...
-
hiddenに値を設定する方法
-
javascriptでセレクトメニュー...
-
連想配列を使ってコンボボック...
-
javascriptでセレクトボックス...
-
selectが変更されたらnameを指...
-
まったく同じ<select>フォーム...
-
セレクトボックスで選択した内...
-
同じ名前のセレクトがある場合...
-
selectボックスの選択結果を変...
-
データベースからのarray を j...
-
【JavaScript】プルダウンで数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
全てのselect要素をデフォルト...
-
【JS】selectでchangeした時の...
-
javascriptでセレクトボックス...
-
Selectボックスの一覧表示方法
-
複数のプルダウンを1つにまとめ...
-
コードレビューをお願いします。
-
JavaScriptで<select>の<option...
-
<input>の選択肢をプルダウンメ...
-
select要素のvalueを配列で取得...
-
selectを変更不可にしたい
-
VBScriptでHTMLのセレクトボッ...
-
ラジオボタンとプルダウンを連...
-
javascriptで合計金額を算出し...
-
中百舌鳥駅と深井駅を入れ替え...
-
同じ名前のセレクトがある場合...
-
セレクトボックスで配列を呼び...
-
今日の日付を自動的にセレクト...
-
プルダウンの値によって活性・...
-
サイト内の物件を複数の検索条...
おすすめ情報