asp.net web form CheckBoxList Validate

CheckBoxListのクライアント検証コントローラを実装するメモです。

必須選択用のカスタム検証コントローラ

.aspx

<asp:CheckBoxList ID="chkTeianShubetsu"  CssClass ="teianShubetsu" runat="server" visible="true">
    <asp:ListItem Value="01" Text="リコール"></asp:ListItem>
    <asp:ListItem Value="02" Text="削減"></asp:ListItem>
</asp:CheckBoxList>

<asp:CustomValidator runat="server" ID="reqCheckBoxList" Display="None"></asp:CustomValidator>

.vb

' エラーメッセージ設定
reqCheckBoxList.ErrorMessage = "未選択です"

'クライアント検証用JS、必ずここで設定すること(aspxでClientIDが取得できなかった)
reqCheckBoxList.ClientValidationFunction = String.Format("CustomJs.CreateFunction(CustomJs.Validate.RequiredCheckBoxList,'{0}')", Me.chkTeianShubetsu.ClientID)

.js

var CustomJs;
(function () {
    "use strict";
    CustomJs = {
        CreateFunction: function (callback) {
            var self = arguments;
            return function (src, args) {
                var paras = [];
                $.each(arguments, function (index, value) {
                    paras.push(value);
                });
                $.each(self, function (index, value) {
                    if (value !== callback) {
                        paras.push(value);
                    }
                });
                return callback.apply(this, paras);
            }
        },
        Validate: {
            /**
             * クライアント検証コントローラ
             * @param {any} sender イベントを発生したオブジェクト
             * @param {any} args   発生したイベントに関する情報である「Sys.EventArgs派生オブジェクト」を表す
             * @param {any} targetId 検証対象のClientID
             */
            RequiredCheckBoxList: function (sender, args, targetId) {
                var ctl = document.getElementById(targetId);
                if (ctl) {
                    var inputs = ctl.getElementsByTagName("input");
                    for (var i = 0; i < inputs.length; i++) {
                        if (inputs[i].checked) {
                            args.IsValid = true;
                            return;
                        }
                    }
                }
                args.IsValid = false;
            }
        }
    };
})();