フォームのCheckboxの値をオフの場合でも送信するには?

[上に] [前に] [次に]
ゆみぞお 1997/12/22(月) 14:09:32
フォームの Checkbox オブジェクトがオフの場合でもプログラム
側へ Name(Valueはなしでもよい)を送信したいと考えています。
項目が大量にあるため、Yes-No の2個の radioボタンを使うので
はなく、各項目 1個のチェックボックスで オン・オフを入力させたいのです。
JavaScript を使ったり、いろいろといじりまわしているのですが
これを実現するための簡単な方法があればアドバイスください。
よろしくお願いいたします。

かわもと [E-Mail] 1997/12/22(月) 15:12:39
CheckBoxと同一Nameを持つhiddenの項目を作成し、
ValueにNullをセットしてはダメですか?
ただし、値は配列で渡る事になるため、受け取り側で
それなりの処理をする必要がありますが。

ゆみぞお 1997/12/22(月) 16:42:33
さっそくのコメントありがとうございました。
Hidden を使って、無事 Nameを送信することができました!
・・が、おっしゃる通り オンにしたときに値が配列になり
そのハンドリングではまっています。
ともあれ、一歩前進いたしました。助かりました!

のどあめ 1999/12/20(月) 10:59:40
この質問に、再度追加質問したいのですがお願い致します。
オンになった時、配列になることはわかりましたが、その配列をハンドリングする方法で私は、はまったまま抜けれません(苦笑)
どなたかPeal側で判断する方法を教えてくださいませんでしょうか。
よろしくお願いします。

The Lock 1999/12/20(月) 11:26:24
ロォック様、曰く

HTML側でのINPUTのNAMEがhogehogeだとして

$conv = 'sjis'; #文字コード x-euc-jp/x-sjis / euc/sjis
############
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,$conv);
if ($name eq 'hogehoge') { push(@HOGE,$value); }
else { $FORM{$name} = $value; }
}

入力処理を以上のようにして
後は、配列@HOGEから値をひとつづつ取り出して(あるいは、配列が2つある場合は、先頭の配列は無視するとか)処理すればよろしい!

のどあめ 1999/12/20(月) 13:30:59
The Lock さん有り難うござます。なるほど、早速やってみます!

もう一つ悩んでいる事があるのですが、お聞きしてもよろしいでしょうか?ちょっと主題から離れてしまうので申し訳ないのですが、
今度はJavaScript側なんです。横一列にチェックボックス10個くらい置き最後に全選択ボタン、クリアボタン、最後から2個だけ選択ボタンを作ったのですが、このパターンの列が何十通りもあるのです。

//全選択クリック
function AllSelect_onclick() {
  document.KouSin.SinBu0.checked = true;
  document.KouSin.SinBu1.checked = true;
  document.KouSin.SinBu2.checked = true;
  document.KouSin.SinBu3.checked = true;
  document.KouSin.SinBu4.checked = true;
  document.KouSin.SinBu5.checked = true;
  document.KouSin.SinBu6.checked = true;
  document.KouSin.SinBu7.checked = true;
  document.KouSin.SinBu8.checked = true;
  document.KouSin.SinBu9.checked = true;
  document.KouSin.SinBu10.checked = true;
  document.KouSin.SinBu11.checked = true;
  document.KouSin.SinBu12.checked = true;
  document.KouSin.SinBu13.checked = true;
}
・・・・・・・と1行分ずつ何十個も書いていられません。
なのでLoopでクルクル回すように作りたいのですが、単純に変数に代入してもどうもObjectとして認識されません。

for function AllSelect_onclick(){
  cbs = document.KouSin.SinBu;
  for (i = 0;i < cbs.length; i++) {
      cbs[i].checked = true;
  }
}

通常このような場合はどんな処理をしてらっしゃるのでしょうか?
初歩的な質問で申し訳ないのですが、よろしくお願いいたします。

あきゃ [E-Mail] 1999/12/20(月) 14:58:49
横やりを入れて申し訳ありません。
for文の中は
document.KouSin.elements[i].checked = true;
で、いけると思います。

のどあめ 1999/12/20(月) 16:39:26
あきゃ さん有り難うございます。
elementsも考えたのですが、なんせチェックボックスが1画面に200個くらい大量にある為に、わけがわからなくなりそうだったので、他の方法はないものかと思ったのですが〜どうなんでしょう?ないのですかね?

のどあめ 1999/12/20(月) 19:13:00
[[解決]]
皆さん回答有り難うございました。何とかできました!
チェックボックスの配列もelementsでやってみることにしました。
本当に有り難うございました。

[上に] [前に] [次に]