0

DB から動的に入力された CheckBoxList があります。

<asp:CheckBoxList ID="chklist1" runat="server" onclick="chklist1_onclick()" />

入力すると、いくつかのオプションがあり、そのうちの 1 つに「応答なし」というテキストが表示されます。

私が欲しいのは、次のことを行う JavaScript 関数です。

1) [No Response] をオンにした場合、他のすべてのオプションをオフにする必要があります。

2) 「応答なし」以外のオプションの少なくとも 1 つをオンにした場合、「応答なし」オプションをオフにする必要があります。

明確になることを願っています。前もって感謝します。

私の試みは:

    function chklist1_onclick() {
    var chklist1 = document.getElementById('<%= chklist1.ClientID %>');
    var chkList = chklist1.getElementsByTagName("input");
    for (var i = 0; i < chkList.length; i++) {
        if (chkList[i].checked && chkList[i].value == "6") {
            for (var i = 0; i < chkList.length; i++) {
                if (chkList[i].checked && chkList[i].value != "6") {
                    chkList[i].checked = false;

                }
            }
        }
    }
}

ここで、6 は「応答なし」項目の値です。しかし、この方法ではケースのみを解決します 1)

4

3 に答える 3

1

No Responseチェックボックスがあると仮定するvalue=""と、次のスクリプトを試すことができます。

<script type="text/javascript">
    window.onload = function () {
        var noResponseCheckBoxFilter = function(item) {
            return item.value == '';
        };
        var otherCheckboxesFilter = function(item) {
            return !noResponseCheckBoxFilter(item);
        };

        var childInputs = document.getElementById('<%= chklist1.ClientID %>').getElementsByTagName('input');
        var checkboxes = Array.prototype.slice.call(childInputs, 0).filter(function (item) {
            return item.type == 'checkbox';
        });
        for (var i = 0; i < checkboxes.length; i++) {
            checkboxes[i].onclick = function () {
                if (this.value == '') {
                    if (this.checked) {
                        // uncheck the other checkboxes
                        var otherCheckboxes = checkboxes.filter(otherCheckboxesFilter);
                        for (var j = 0; j < otherCheckboxes.length; j++) {
                            otherCheckboxes[j].checked = false;
                        }
                    }
                } else {
                    // uncheck the No Response checkbox
                    checkboxes.filter(noResponseCheckBoxFilter)[0].checked = false;
                }
            };
        }
    };
</script>

No Response チェックボックスの値が空の文字列と異なる場合は、前の例のテストを単純に適用します。

于 2013-05-15T11:29:32.417 に答える
0

次のコードで解決しました:

 window.onload = function () {
    var chklist1 = document.getElementById('<%= chklist1.ClientID %>');
    var chkList = chklist1.getElementsByTagName("input");
    for (var i = 0; i < chkList.length; i++) {
        chkList[i].onclick = function () {

            if (this.checked) {
                if (this.value == "6") {
                    for (var i = 0; i < chkList.length; i++) {
                        if (chkList[i].value != "6") {
                            chkList[i].checked = false;
                        }
                    }
                }
                else {
                    for (var i = 0; i < chkList.length; i++) {
                        if (chkList[i].value == "6") {
                            chkList[i].checked = false;
                        }
                    }
                }
            }

        };
    }
};

asp タグの onclick イベントを削除しました。

于 2013-05-15T15:07:34.783 に答える
0

Darin のソリューションを少し修正したバージョンです。これは IE8 と互換性があると思います。

var checkBoxList = document.getElementById('<%= chklist1.ClientID %>');
var checkboxes = checkBoxList.querySelectorAll('input[type=checkbox]');
var nonecheckbox = checkBoxList.querySelectorAll("input[value='6']")[0];
var i, j;
for (i = 0; i < checkboxes.length; ++i) {
     checkboxes[i].onclick = function () {
         if (this.value == '6' && this.checked) {
             // uncheck the other checkboxes
             for (j = 0; j < checkboxes.length; ++j) {
                 if (checkboxes[j].value != '6') {
                     checkboxes[j].checked = false;
                 }
             }
         } else {
             // uncheck the No Response checkbox
             nonecheckbox.checked = false;
         }
    };
}
于 2013-05-15T14:27:47.137 に答える