SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

データが1件の時だけ、JavaScriptの必須チェックが誤動作する

WEBアプリでよくあるバグ

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

現象

よくある承認画面
よくある承認画面
必須チェックの誤動作バグ
必須チェックの誤動作バグ

 上の画面は、ワークフロー機能でよくある承認画面です。チェックボックスで選択したデータは、[承認]ボタンをクリックすることで、状態を「承認待ち」から「承認済み」へ変更できます。入力チェックとして、「選択0件で承認ボタンをクリックしたときはエラー表示」という処理をJavaScriptで実装しています。

 ところが、データが1件の時だけ、「選択しているのに『1件も選択されていません』というエラーが出る」というバグが発生しました。

バグコード

 入力チェックのコードは、次のようになっていました。

バグを含んだJavaScriptのソース
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件ある場合は次のようになっています。

フォーム部品に関係する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行しか出力されていませんでした。

 さて、バグの原因は何でしょう?

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
原因

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

山城拓明(ヤマシロヒロアキ)

Web系SE。某企業にてWebシステム開発や新人Java研修講師を担当。Webアプリケーション開発における「よくあるハマるバグ」をまとめ、著書「バグ攻略で極めるWeb開発のツボ」(翔泳社)を出版。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2544 2008/06/17 01:25

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング