※質問に間違いがありましたので、改めて質問させていただきます。

JavaScriptで、アンケートのラジオボタンの空欄チェックを行う方法を教えてください。ラジオボタンの質問が3問あります。問1(選択肢は4つ)で1番目~3番目を選択した人は、問2(選択肢は4つ)と問3(選択肢は5つ)の回答が必須になります。問1で1番目~3番目を選択して、かつ問2および問3で何も選択してない場合のみ、ポップアップでエラーメッセージを出したいのです。(※問1の空欄チェックは今回は不要です。)以下のスクリプトを加工して使いたいのですが、どのようにすればいいかを教えていただけないでしょうか。

<SCRIPT Language="JavaScript">
<!--
function Check()
{
if (document.test.Q01[3].checked == true) { alert("問1で「持っていない」と回答した人は、問2にもお答えください"); return false; }
}
// -->
</SCRIPT>

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2008/02/05 19:28:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:tukihatu No.1

回答回数180ベストアンサー獲得回数32

ポイント50pt

べつに再質問しなくても聞いちゃえば良かったのに^^;

ちょこっと変えるだけですよ。

<SCRIPT Language="JavaScript">
<!--
function Check()
{
var obj = document.test.Q02;
for (i = 0 ; obj.length > i ; i++ ){
   if (obj[i].checked){
            date = obj[i].value ;
            break;
   }
}
if (document.test.Q01[3].checked == false && !date) { alert("問1で「持っていない」と回答した人は、問2にもお答えください"); return false; }
}
// -->
</SCRIPT>

document.test.Q01[3].checked をfalseにしただけです。

もしくはdocument.test.Q01[3].checked != trueでもいけますよ

id:mathematician

ご回答ありがとうございました。

早速試してみたのですが、エラーが出ません。

上記の問2で選択肢の数が変わると影響しますか?

2008/02/05 17:59:23
id:aside No.2

回答回数339ベストアンサー獲得回数31

ポイント50pt

長くなっちゃった・・・

<SCRIPT Language="JavaScript">
<!--
function Check()
{
// 問1のチェック
var flgQ1;
for (var idx = 0; idx < 3; idx++) {
  flgQ1 = document.test.Q01[idx].checked;
}
// 問2のチェック
var flgQ2;
for (var idx = 0; idx < 4; idx++) {
  flgQ2 = document.test.Q02[idx].checked;
}
// 問3のチェック
var flgQ3;
for (var idx = 0; idx < 5; idx++) {
  flgQ3 = document.test.Q03[idx].checked;
}
// 確認
if (flgQ1 && (!flgQ2 || !flgQ3)) { alert("問1で「持っていない」と回答した人は、問2にもお答えください"); return false; }
}
// -->
</SCRIPT>
id:mathematician

ご回答ありがとうございました。

早速試してみたのですが、エラーが出ません。

上記の例ですと、フォームの中で使用しているnameがQ01、Q02、Q03となってると思うのですが、

nameが変われば、どの部分を変更すればいいのでしょうか?

2008/02/05 18:51:01
id:tukihatu No.3

回答回数180ベストアンサー獲得回数32

ポイント50pt

ごめんなさい!問3増えてたんですね…見落としてました><

お詫びに短いコードを。

あ、ポイントはいらないですよ。

function Check(){
	var date1 = radio_obj(document.test.Q02);
	var date2 = radio_obj(document.test.Q03);
	alert(date1);alert(date2);

	if (document.test.Q01[3].checked == false &&(!date1 || !date2)) { 
		alert("問1で「持っていない」と回答した人は、問2、問3にもお答えください"); return false;
	}
}
function radio_obj(obj){
	for (i = 0 ; obj.length > i ; i++ ){
	   if (obj[i].checked){
	       return true;
	   }
	}
}

functionをもう一個作ってしまうと結構便利です。

id:mathematician

ありがとうございます。

しかし、試してみると「undefined」というエラーが2回続けて出てしまいます。

どこが問題あるのかわかりません・・・

2008/02/05 19:03:29
id:KUROX No.4

回答回数3542ベストアンサー獲得回数140

ポイント50pt
<SCRIPT Language="JavaScript">
<!--
function Check()
{
// 問1のチェック
var flgQ1 = false;
for (var idx = 0; idx < 3; idx++) {
   if(document.test.Q01[idx].checked == true){
      flgQ1 = true;
   }
}
// 問2のチェック
var flgQ2 = false;
for (var idx = 0; idx < 4; idx++) {
   if(document.test.Q02[idx].checked == true){
      flgQ2 = true;
   }
}
// 問3のチェック
var flgQ3 = false;
for (var idx = 0; idx < 5; idx++) {
  if(document.test.Q03[idx].checked == true){
     flgQ3 = true;
  }
}
// 確認
if (flgQ1 && (!flgQ2 || !flgQ3)) { alert("問1で「持っていない」と回答した人は、問2にもお答えください"); return false; }
}
// -->
</SCRIPT>

たぶん・・。

id:mathematician

ご回答ありがとうございました。

これで試してみます。

2008/02/05 19:26:46

この質問への反応(ブックマークコメント)

トラックバック

  • http://q.hatena.ne.jp/1202199353Checkの部分が大分長くなっちゃったけど。(Q1が1もしくは2もしくは3の場合)でかつ、(Q2が選択されてない または Q3が選択されてない)場合アラートって感じ...
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません