CGI-BBS > JAVA/JavaScript > JavaScript > ラジオボタン、チェックボックスの入力チェックについて。


カレッヂ
カレッヂ


質問者 mmm  投稿日 5/15(火) 18:36:21
フォーム内にてラジオボタン、チェックボックスを使っています。
チェックボックスは2箇所に分かれていて、ラジオボタンは1箇所です。
この3箇所全てを選択必須にしたいのですが、1箇所のチェックボックスを除いてあとがうまくいきません。

<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
function check() {
    if( !(document.form.app1.checked ||
       document.form.app2.checked ||
       document.form.app3.checked ||
              document.form.app4.checked ||
              document.form.app5.checked ||
              document.form.app6.checked ||
              document.form.app7.checked ||
              document.form.app8.checked ||
              document.form.app9.checked ||
              document.form.app10.value)) {
        alert("必須項目は全てご記入下さい。");
        return false;
    } else {
        return true;
    }
}

function check() {
    if( !(document.form.find1.checked ||
       document.form.find2.checked ||
       document.form.find3.checked ||
              document.form.find4.checked ||
              document.form.find5.checked ||
              document.form.find6.checked ||
              document.form.find7.value) ||
            !(document.form.app1.checked ||
       document.form.app2.checked ||
       document.form.app3.checked ||
              document.form.app4.checked ||
              document.form.app5.checked ||
              document.form.app6.checked ||
              document.form.app7.checked ||
              document.form.app8.checked ||
              document.form.app9.checked ||
              document.form.app10.value)) {
        alert("必須項目は全てご記入下さい。");
        return false;
    } else {
        return true;
    }
}
//-->
</SCRIPT>

ラジオボタンの設定がよく分からず、まだ何もしていないのですが、上の2箇所のうち、下のグループの方は選択しないと警告が出てうまくいっています。
上は何もチェックしなくても送信できてしまいます。

問題点をどなたか指摘して頂けませんか???
ラジオボタンについても宜しかったらアドバイスを下さい。
宜しくお願い致します。

質問者 mmm  [削除]  投稿日 5/15(火) 18:39:47
すみません、間違えました。

<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
function check() {
    if( !(document.form.app1.checked ||
       document.form.app2.checked ||
       document.form.app3.checked ||
              document.form.app4.checked ||
              document.form.app5.checked ||
              document.form.app6.checked ||
              document.form.app7.checked ||
              document.form.app8.checked ||
              document.form.app9.checked ||
              document.form.app10.value)) {
        alert("必須項目は全てご記入下さい。");
        return false;
    } else {
        return true;
    }
}


function check() {
    if( !(document.form.find1.checked ||
       document.form.find2.checked ||
       document.form.find3.checked ||
              document.form.find4.checked ||
              document.form.find5.checked ||
              document.form.find6.checked ||
              document.form.find7.value )) {
        alert("必須項目は全てご記入下さい。");
        return false;
    } else {
        return true;
    }
}

//-->
</SCRIPT>

↑こうでした。
補足として、チェックボックス、ラジオボタン共に最後の選択肢のみテキストエリアになっております。
回答者 しあわせのツボ  [削除]  投稿日 5/15(火) 18:53:30
同一名称のfunctionが複数あるのが原因だと思います。
順次上書きされていき、結果として最後に記述したものだけが有効になったと記憶しています。
function名が重複しないようにするか、単一のfunctionにまとめてみて下さい。
質問者 mmm  [削除]  投稿日 5/15(火) 19:01:26
しあわせのつぼさん、ご返答有難うございます。
この度もお世話になります。

> function名が重複しないようにするか、単一のfunctionにまとめてみて下さい。
全てをappやfindにしてしまえばいいのでしょうか???
とりあえず試しに今からやってみます。

失敗したら又書き込ませて頂くと思いますが、有難うございました。
質問者 mmm  [削除]  投稿日 5/15(火) 19:08:18
そういえば、メールをとばすと同時にcsvファイルにもデータがおちるように設定していまして、
そちらはcgiファイルに

elsif ($name eq "app1") { $app1 = $value;        }
        elsif ($name eq "app2") { $app2 = $value;        }
        elsif ($name eq "app3") { $app3 = $value;        }
        elsif ($name eq "app4") { $app4 = $value;        }
        elsif ($name eq "app5") { $app5 = $value;        }
        elsif ($name eq "app6") { $app6 = $value; }
        elsif ($name eq "app7") { $app7 = $value; }
        elsif ($name eq "app8") { $app8 = $value; }
        elsif ($name eq "app9") { $app9 = $value; }
        elsif ($name eq "app10") {
  
          $app10 = $value;

    if ($app1 ne ""){ $app = "$app1" }
    if ($app2 ne "" && $app ne ""){ $app = "$app/$app2" }
    elsif ($app2 ne "" && $app eq ""){ $app = "$app2" }
    if ($app3 ne "" && $app ne ""){ $app = "$app/$app3" }
    elsif ($app3 ne "" && $app eq ""){ $app = "$app3" }
    if ($app4 ne "" && $app ne ""){ $app = "$app/$app4" }
    elsif ($app4 ne "" && $app eq ""){ $app = "$app4" }
    if ($app5 ne "" && $app ne ""){ $app = "$app/$app5" }
    elsif ($app5 ne "" && $app eq ""){ $app = "$app5" }
    if ($app6 ne "" && $app ne ""){ $app = "$app/$app6" }
    elsif ($app6 ne "" && $app eq ""){ $app = "$app6" }
    if ($app7 ne "" && $app ne ""){ $app = "$app/$app7" }
    elsif ($app7 ne "" && $app eq ""){ $app = "$app7" }
    if ($app8 ne "" && $app ne ""){ $app = "$app/$app8" }
    elsif ($app8 ne "" && $app eq ""){ $app = "$app8" }
    if ($app9 ne "" && $app ne ""){ $app = "$app/$app9" }
    elsif ($app9 ne "" && $app eq ""){ $app = "$app9" }
    if ($app10 ne "" && $app ne ""){ $aapp = "$aapp:/その他:$app10" }
    elsif ($app10 ne "" && $app eq ""){ $app = "その他:$app10" }
  
    
    push(@DATA_N,$name);
                push(@DATA_V,$app);

        }



    
  elsif ($name eq "find1") { $find1 = $value;        }
        elsif ($name eq "find2") { $find2 = $value; }
        elsif ($name eq "find3") { $find3 = $value; }
        elsif ($name eq "find4") { $find4 = $value; }
        elsif ($name eq "find5") { $find5 = $value; }
        elsif ($name eq "find6") { $find6 = $value; }
        elsif ($name eq "find7") {
  
          $find7 = $value;

    if ($find1 ne ""){ $find = "$find1" }
    if ($find2 ne "" && $find ne ""){ $find = "$find:/$find2" }
    elsif ($find2 ne "" && $find eq ""){ $find = "$find2" }
    if ($find3 ne "" && $find ne ""){ $find = "$find/$find3" }
    elsif ($find3 ne "" && $find eq ""){ $find = "$find3" }
    if ($find4 ne "" && $find ne ""){ $find = "$find/$find4" }
    elsif ($find4 ne "" && $find eq ""){ $find = "$find4" }
    if ($find5 ne "" && $find ne ""){ $find = "$find/$find5" }
    elsif ($find5 ne "" && $find eq ""){ $find = "$find5" }
    if ($find6 ne "" && $find ne ""){ $find = "$find/$find6" }
    elsif ($find6 ne "" && $find eq ""){ $find = "$find6" }  
    if ($find7 ne "" && $find ne ""){ $find = "$find:/その他:$find7" }
    elsif ($find7 ne "" && $find eq ""){ $find = "その他:$find7" }
  
   push(@DATA_N,$name);
  push(@DATA_V,$find);

↑このような感じに書いています。
(チェックボックスで複数チェックしても1つの設問に対しての答えが1つのセルに全て収まるように/で区切っています。)

functionを重複しない、又は単一にする場合、次はこちらの書き方が分からなくなってしまいました。

どうすれば巧くおさまりますか???
宜しければアドバイスをお願い致します。
回答者 しあわせのツボ  [削除]  投稿日 5/15(火) 20:36:37
この場合、JavaScriptの変更はCGIに影響しません。
# あまり効率的ではない書き方だとは思いますが、Perlは「動く」ことが大事ですから(笑)

要するに
function check() { 処理1; }
function check() { 処理2; }
となっているものを
function check1() { 処理1; }
function check2() { 処理2; }

function check() { 処理1; 処理2; }

function check() { sub1(); sub2(); }
function sub1() { 処理1; }
function sub2() { 処理2; }
にしてみて下さい、ということです。
質問者 mmm  [削除]  投稿日 5/16(水) 11:49:54
ご返答有難うございます。
早速書き換えてみました。

そこでなのですが・・・
試しに
<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
function check(){
if(!document.form.company.value){
alert('必須項目は全てご記入下さい。');
return false;
}

if(!document.form.name.value){
alert('必須項目は全てご記入下さい。');
return false;
}

if(!document.form.address.value){
alert('必須項目は全てご記入下さい。');
return false;
}
}

//-->
</SCRIPT>
とやってみました。
そうしたらここに書いた項目全てを記入してもダイアログが出てしまいました。
何故でしょう・・・・・・。

宜しかったら教えて頂けますか???
回答者 しあわせのツボ  [削除]  投稿日 5/16(水) 14:06:51
対策を考える前に原因を知る必要がありそうです。
メッセージをそれぞれ変えて、どのアラートが実行されているのかを調べてみて下さい。
質問者 mmm  [削除]  投稿日 5/16(水) 18:44:27
アドバイス、どうも有難うございます。
では早速試してみます。
お世話になりっぱなしで本当にすみません!!!

返信(回答)する


Web裏技