CheckboxのOnclickイベントでそのオブジェクトをClick()する

[上に] [前に] [次に]
あはは 2000/04/03(月) 12:40:56
複数のチェックボックスの内、全部選択しない、
または一つしか選択できないようにしたいのです。
下のように作ったのですが、JavaScript中のclick()でも
checks()が起動してしまいます。上手い方法はあるでしょうか?


<HTML><HEAD>
<SCRIPT TYPE="text/JavaScript">
<!--
function checks(a){
for(i=0;i<4;i++){ // 0〜3まで繰り返す
if(i!=a){ // i=aの時、以下を実行しない。
b=document.f1.elements[i] // 対象のオブジェクト
if(b.checked){b.click()}
}continue;
}
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="f1">
    <INPUT TYPE="CHECKBOX" onClick="checks(0)">選択1
    <INPUT TYPE="CHECKBOX" onClick="checks(1)">選択2
    <INPUT TYPE="CHECKBOX" onClick="checks(2)">選択3
    <INPUT TYPE="CHECKBOX" onClick="checks(3)">選択4
</FORM>
</BODY></HTML>

H&A 2000/04/03(月) 13:06:33
チェックボックスをチェックされていない状態にしたいのであれば、check() メソッドではなく checked プロパティを false にするというのはどうでしょうか?

if(b.checked){b.click()}

b.checked = false;

H&A 2000/04/03(月) 13:07:27
> check() メソッドではなく

click() の間違いですね。

あはは 2000/04/03(月) 13:16:02
[[解決]]
H&Aさんありがとうございます!完璧でした。

H&A 2000/04/03(月) 13:20:25
[解決]されていますが、ちょっとだけ補足。
以下のようにすると、選択肢がいくつになってもスクリプトを変更しなくてすみます。

<HTML><HEAD>
<SCRIPT TYPE="text/JavaScript">
<!--
function checks(a){
  var elem = document.f1.check1;

  if(elem.length) {
    for(i = 0; i < elem.length; i++)
      if(i != a) elem[i].checked = false;
  }
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="f1">
    <INPUT TYPE="CHECKBOX" NAME="check1" onClick="checks(0)">選択1
    <INPUT TYPE="CHECKBOX" NAME="check1" onClick="checks(1)">選択2
    <INPUT TYPE="CHECKBOX" NAME="check1" onClick="checks(2)">選択3
    <INPUT TYPE="CHECKBOX" NAME="check1" onClick="checks(3)">選択4
</FORM>
</BODY></HTML>

Internet Explorer 5.01 と Netscape Communicator 4.5 で確認しました。古臭いテクニックしか使っていないので、他の環境でもだいたい動作するのではないかと思います。
さらに汎用的にするには、チェックボックスの name も引数にするという方法が考えられますね。

あはは 2000/04/03(月) 14:51:36
重ね重ねありがとうございます。
NAMEで同じ名前をつけるとこがなるほどですね。
覚えておきます(^^)

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