return false がついてたのね・・・とほほ・・・[プログラミング]
(2014-03-14 13:54:09) by shinoda


< ページ移動: 1 2 >

一昨日の午後は本当に無駄な時間を過ごしてしまった

複数あるチェックボックスのチェックした数をリアルタイムに調べて、4つ以上チェックしたらワーニングを出そうと思って、以下のようなスクリプトを書いた。

function chkCHKBOX(idx){

var total = 0;
var max = window.document.form.elements['CHKBOX'].length;

for (var i = 0; i < max; i++) {
if (window.document.form.elements['CHKBOX'][i].checked) {
total += 1;
}
}

if (total > 3) {
alert("同時にチェックできるのは3つまでです");
window.document.form.elements['CHKBOX'][idx].checked = false;
}

}

jQuery 使ってひたすらチェックボックスの状況を監視するスクリプトを書いてもいいんだろうが、まあ、そこまでするほどじゃないので簡単な方法で。

HTML は、

<input type="checkbox" name="CHKBOX" onClick="chkCHKBOX(0);" value="テレビ" />テレビ<br />
<input type="checkbox" name="CHKBOX" onClick="chkCHKBOX(1);" value="CD" />CD<br />
<input type="checkbox" name="CHKBOX" onClick="chkCHKBOX(2);" value="DVD" />DVD<br />
<input type="checkbox" name="CHKBOX" onClick="chkCHKBOX(3);" value="映画" />映画<br />
<input type="checkbox" name="CHKBOX" onClick="chkCHKBOX(4);" value="書籍" />書籍<br />
<input type="checkbox" name="CHKBOX" onClick="chkCHKBOX(5);" value="その他" />その他<br />

てな感じで。

チェックボックスの ONCLICK イベントが発生する度に chkCHKBOX 関数を実行するだけ。
チェック数が3個を超えていたら、ワーニングを出して、直近のチェックを外すだけという単純な動き。

なのに、上手くいかない。
チェックボックスをクリックしてもチェックが付かないのだ。1つ目から。3個超えたわけじゃないのに。

ま、原因は、最初に HTML を書いた時に、

<input type="checkbox" name="CHKBOX" onClick="chkCHKBOX(0);return false;" value="テレビ" />テレビ<br />

としてたから。
他所の行をコピってきて、そのまま消し忘れてたは・・・

クリックされた時に実行させる関数の動きだけで処理を止める場合、最後に return false; を付ける。そうしないと、関数実行終了後にその FORM 本来の動きが実行されちゃうのだ。
例えば、type="submit" のボタンの ONCLICK イベントで document.form.submit(); みたいに FORM を実行してるのに、ちゃんと onClick="document.form.submit();return false;" みたいにしてないと、その後、今度は submit ボタン本来の動きで FORM が実行され二重実行になってしまう。そうしないためには、イベントの最後に return false; を入れて、FORM 本来の動きを中断させちゃうということ。

< ページ移動: 1 2 >


コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8