チェックボックスに1つでもチェックが入っているかどうかを調べる

一覧画面で明細を選択して何か処理をする場合、ひとつもチェックされていなかったらメッセージボックスを出したい。

そんな要件を満たすために今まで結構めんどくさい事をしてた。なにがめんどくさいってチェックボックスの個数によって処理を分けないといけないから。チェックボックスの個数というのは

  • 1つも無い(checkboxオブジェクトが無い)
  • 1つしか無い(checkboxオブジェクトがある)
  • 2つ以上ある(checkboxオブジェクトが配列になっている)

とこの3パターン。今までは律儀にこう判定していたわけですが、今日はちょっと違う書き方をしてみた。

// IE用
function existChecked() {
    // 1個も無い
    if (!formName.checkboxName) {
        return;
    }

    var checkList;
    if (formName.checkboxName.length) {
        // 1個しか無い
        checkList = formName.checkboxName;
    } else {
        // 2つ以上ある
        checkList = [formName.checkboxName];
    }

    for (var i = 0; i < checkList.length; i++) {
        if (checkList[i].checked) {
            return true;
        }
    }
    return false;
}

別に美しくないんだけど、チェック状態の判定を1箇所でできるのは初めて書いた。配列かどうかの判定も美しい方法じゃなくて動いているからいいや系(苦笑)