Webプログラマが誰でも一度はハマる「チェックボックスが1個の時のみ発生するバグ」を解説します。
現象


上の画面は、ワークフロー機能でよくある承認画面です。チェックボックスで選択したデータは、[承認]ボタンをクリックすることで、状態を「承認待ち」から「承認済み」へ変更できます。入力チェックとして、「選択0件で承認ボタンをクリックしたときはエラー表示」という処理をJavaScriptで実装しています。
ところが、データが1件の時だけ、「選択しているのに『1件も選択されていません』というエラーが出る」というバグが発生しました。
バグコード
入力チェックのコードは、次のようになっていました。
function check() { var sentakuChk = document.form1.sentakuChk; for (var i=0; i<sentakuChk.length; i++) { if (sentakuChk[i].checked) { return true; } } alert("1件も選択されていません。"); return false; }
フォーム部品に関係するHTMLは、データが3件ある場合は次のようになっています。
<form name="form1"> <input name="sentakuChk" type="checkbox" value="11111"> <input name="sentakuChk" type="checkbox" value="11112"> <input name="sentakuChk" type="checkbox" value="11113"> <input name="shouninBtn" type="submit" value="承認" onclick="return check();"> </form>
チェックボックスのタグ(太字部分)は、サーバ側プログラムにより動的に生成されるもので、バグ発生時は1行しか出力されていませんでした。
さて、バグの原因は何でしょう?
- 修正履歴
-
- 2008/06/17 01:25 「DOMを利用した修正」を追加しました。
この記事は参考になりましたか?
- この記事の著者
-
山城拓明(ヤマシロヒロアキ)
Web系SE。某企業にてWebシステム開発や新人Java研修講師を担当。Webアプリケーション開発における「よくあるハマるバグ」をまとめ、著書「バグ攻略で極めるWeb開発のツボ」(翔泳社)を出版。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
