2009-07-05 17 views
7

Próbuję założyć jakąś weryfikację, tak że jeśli „Tak” przycisk radiowy jest sprawdzana kolejną kontrolę, czyli listy rozwijanej musi być zatwierdzone, aby zapewnić, że nie jest ustawiony do domyślnego pierwszego wpisu na liście "Proszę wybrać ...".jQuery.Validate warunkowe Walidacja RadioButton i DropDownList

Próbowałem wielu kombinacji, ale nie udało mi się tego uruchomić. Komunikat sprawdzania poprawności pokazuje, czy pole wyboru jest zaznaczone, czy nie.

Oto kod!

Jest to metoda, która na zlecenie mam użyć, aby zweryfikować rozwijanych listach. (Działa to dobrze dla prostych walidacji DDL)

$.validator.addMethod(
    "selectNone", 
    function(value, element) { 
     return this.optional(element) || element.value != "Please Select..."; 
    }, 
    "Please select an option." 
); 

Aby zrobić walidacji na podstawie wyboru Dodałem regułę postaci

$(document).ready(function() { 
     var validator = $("#BuildingsCoverForm").validate({ 
      rules: { 
       NCBYears: { 
        selectNone: function(element) { 
         return $("*[name='PreviousInsurance']")[0].checked; 
        } 
       } 

      }, 
      messages: { 
       NCBYears: { 
        selectNone: "This field is required" 
       } 
      } 
     }); 
    }); 

I tu są kontrole.

<p> 
     <label for="PreviousInsurance" class="halfstretch">Do you have any previous insurance?</label> 
     <%= Html.YesNoControl("PreviousInsurance", Model.PreviousInsurance)%> 
    </p> 
    <p> 
     <label for="NCBYears" class="halfstretch">Building No Claim Bonus</label> 
     <%= Html.DropDownList("NCBYears", ViewData["NCBYears"] as SelectList)%> 
    </p> 

Wszelkie pomysły będą bardzo mile widziane.

Wiele Dzięki

Odpowiedz

23

Dopóki opcja pierwsza lista rozwijana ma wartość pustą (<option value="">some text</option>), następująca reguła będzie działać:

rules: { 
    NCBYears: { 
    required: function(element) { 
     return $("input:radio[name='PreviousInsurance']:checked").val() == 'yes'; 
    } 
    }     
} 

od: http://docs.jquery.com/Plugins/Validation/Methods/required#dependency-expression

+0

Ale nie ma "Proszę wybrać ..." i to musi pozostać – andyJ

+0

Tylko wartość opcji musi być pusta, a nie tekst. Jeśli kontrola nie może tego zrobić, użyj jquery, aby zmienić wartość na pustą w gotowości. – ScottE

-1

nie pracować z aktualną wersją Validate.js (v 1.7)

byłem też w stanie udowodnić, samo pojęcie nie działa:

rules: { 
    xyz: { 
    required: function(element) { 
     return true; 
    } 
    }     
} 

To również nie działa.

+1

Nie - zignoruj ​​to. Okazało się, że sprawdzałem pochodną xyz (preset z jakimś tekstem - "proszę wybrać datę") zamiast czystego xyz. – Nigel

1

ScottE jest poprawny. Mam listę rozwijaną wypełnioną z bazy danych i właśnie dodałem pozycję na samej górze listy i nadałem jej wartość "". Po sprawdzeniu poprawności danych wejściowych po prostu sprawdź, czy lista rozwijana jest pusta. Można również zakodować listę, jeśli nigdy się nie zmieni i dodać element do góry z pustą wartością, na przykład poniżej.

_example.Add(new SelectListItem { Text = "Select Example", Value = ""});