Получить все выбранные значения из списка ListBox (на стороне клиента)

Я пытаюсь реализовать пользовательский валидатор в JavaScript для моей страницы vb.net. Этот валидатор должен проверить, нет ли в списке многозадачности выбранных значений, показывая, что ошибка появляется, если это так.

Дело в том, что я хочу сделать это на стороне клиента, но в моей функции validateFunction я получаю только последний выбранный (или не выбранный, если он уже выбран) элемент. Я знаю, как это сделать с кодом кода, но я хочу сделать это на стороне клиента.

код aspx:

 <asp:ListBox ID="lbEdit" runat="server" SelectionMode="Multiple">
 </asp:ListBox>
 <asp:CustomValidator id="cvEdit" runat="server" Display="None" ControlToValidate="lbEdit" ClientValidationFunction="validateFunction"/>
 <ajax:ValidatorCalloutExtender runat="server" ID="vceEdit" TargetControlID="cvEdit" />

Код JavaScript:

 function validateFunction(source, arguments) {
        var options = document.getElementById(source.controltovalidate).options;
            for (var i = 0; i < options.length; i++) {
                if (options[i].selected == true) {
                    args.IsValid = true;
                    return;
                }
            }
            args.IsValid = false;
 }

Как я уже сказал, поскольку последний (un) выбранный элемент будет единственным, выбранным в массиве "options", функция проверки всегда вернет true...

Я думал о заполнении другого массива в другой функции javascript как "истинный выбранный массив" и сравнивать его значения с выбранным параметром каждый раз, когда срабатывает функция. но я думаю, что должен быть лучший способ.

Итак... Есть ли прямой способ получить ВСЕ выбранные элементы из многозадачного списка в javascript?

Ответ 1

Ваш вопрос немного неясен, и ваша функция кажется работающей, но то, что я отвечу здесь, является последней частью вашего вопроса. Итак... Есть ли прямой способ получить ВСЕ выбранные элементы из многозадачного списка в JavaScript?

Попробуйте эту функцию js

<script type="text/javascript">
        function validateFunction() {
            var options = document.getElementById('<% = this.lbEdit.ClientID %>').options;
            var selectedItems;
            for (var i = 0; i < options.length; i++) {
                if (options[i].selected == true) {
                    if (selectedItems) {
                        selectedItems = selectedItems + ";" + options[i].value;
                    }
                    else {
                        selectedItems = options[i].value;
                    }
                }
            }
            if (selectedItems) {
                alert(selectedItems);
                return true;
            }
            else {
                alert("No item was selected");
                return false;
            }
        }
    </script>

И это код aspx, я удалил валидатор

 <asp:ListBox ID="lbEdit" runat="server" SelectionMode="Multiple" >
 </asp:ListBox>
    <asp:Button ID="test" runat="server" Text="send"  OnClientClick="return validateFunction();"/>

В инструментах разработчика вашего браузера вы можете увидеть подробную информацию обо всех свойствах вашего объекта.

введите описание изображения здесь

Ответ 2

let a1 = [
{
    Selected:false,
},
{
    Selected:false
},
{
    Selected:false
}];

if (a1.some(i = > i.Selected))   console.log(истина); еще   console.log(ложь);

Возможно, что вы хотите