2017-09-11 50 views
12

Próbuję zaimplementować niestandardowy weryfikator w JavaScript dla mojej strony vb.net. Ten weryfikator powinien sprawdzić, czy w liście z wieloma językami nie ma żadnych wybranych wartości, pokazując komunikat o błędzie, jeśli tak.pobierz wszystkie wybrane wartości z ListBox (strona klienta)

Chodzi o to, że chcę to zrobić po stronie klienta, ale w funkcji "validateFunction" dostaję tylko ostatnio wybrany (lub niezaznaczony, jeśli został już wybrany) element. Wiem, jak to zrobić w kodzie z kodem, ale chcę to zrobić po stronie klienta.

kod 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" /> 

kod 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; 
} 

Jak powiedziałem, od ostatniego (un) wybrany produkt będzie tylko jeden wybrany w 'Opcje' array, funkcja sprawdzania poprawności zawsze zwróci true ...

Pomyślałem o zaludnieniu innej arry y w innej funkcji javascript jako "prawdziwie wybranej tablicy" i porównać jej wartości z wybraną opcją za każdym razem, gdy funkcja się uruchamia, ale myślę, że powinien istnieć lepszy sposób.

Więc ... Czy istnieje prosty sposób, aby uzyskać WSZYSTKIE wybrane elementy z listy słów wielojęzycznych w javascript?

Odpowiedz

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

if (a1.some (i => i.Selected)) console.log (prawda); else console.log (fałsz);

Może to, co chcesz

4

Twoje pytanie jest nieco niejasne, a funkcja wydaje się działać, ale co ja odpowiem tutaj jest ostatnią częścią Twojego pytania Więc ... Czy istnieje prosty sposób do przodu uzyskać WSZYSTKIE wybrane elementy z listy wielu języków w javascript?

Spróbuj js funkcja

<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> 

I to jest kod aspx, usunąłem walidator

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

w narzędziach deweloperskich Twojej przeglądarce można zobaczyć szczegółowe informacje o wszystkich właściwości twojego obiektu

enter image description here

+0

Przepraszamy za opóźnienie, nie miałem czasu ze względu na nowy i pilny projekt, który otrzymaliśmy ... wciąż na nim, cholernie ... Do odpowiedzi, wygląda na to, że twój kod robi to samo jako moje, więc 'options [i] .selected == true' tylko wystrzeli jeden raz w moim kodzie, z ostatnią klikniętą opcją ... Moje narzędzia programistyczne nigdy nie ustawiają więcej niż jeden" selected = true ". Może zadeklarowałem listbox w niewłaściwy sposób? Mam nadzieję, że w poniedziałek pozostało trochę czasu, aby dokonać dalszej oceny i być może ponownie otworzyć pytanie. W międzyczasie nie mogę dać ci hojności, przynajmniej uprowadzenie za wysiłek, dzięki! –

+0

Właściwie to zauważyłem, że byłoby to takie samo nagradzanie cię, czy nie, jak przeczytałem, tak hojnie dla ciebie, zasłużyłeś na to. W każdym razie moje obejście spowoduje utworzenie tablicy JavaScript, a za każdym razem, gdy listbox.selected fires, przełączy stan indeksu '(true <---> false) ... wrócę z wiadomościami;) –