2009-07-05 18 views
7

Sto tentando di impostare una convalida, in modo che se il pulsante di opzione "Sì" è selezionato, un altro controllo, che è un elenco a discesa, deve essere convalidato per assicurarsi che non sia impostato alla prima voce predefinita nell'elenco "Selezionare ...".jQuery.Validate Convalida condizionale RadioButton e DropDownList

Ho provato molte combinazioni ma non sono riuscito a farlo funzionare. Il messaggio di convalida indica se la casella di controllo è selezionata o meno.

Ecco un po 'di codice!

Questo è un metodo personalizzato che utilizzo per convalidare i miei elenchi a discesa. (Questo funziona bene per una semplice convalida DDL)

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

di fare la convalida sulla base la casella ho aggiunto una regola per la forma

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

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

E qui ci sono i controlli.

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

Qualsiasi idea sarebbe molto apprezzata.

Molte grazie

risposta

23

Finché la prima opzione elenco a discesa ha un valore vuoto (<option value="">some text</option>), la seguente regola funzionerà:

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

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

+0

Ma non è vero ha una "Selezionare ..." e questo deve rimanere – andyJ

+0

Solo il valore di opzione deve essere vuoto, non il testo. Se il controllo non può farlo, usa jquery per cambiare il valore in bianco pronto. – ScottE

-1

questo non lavoro con la versione corrente di Validate.js (v 1.7)

Sono stato anche in grado di dimostrare che il concetto stesso non funziona:

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

Anche questo non funziona.

+1

No, ignorare questo. Risultò che stavo controllando una derivata di xyz (preimpostata con un testo come - "per favore seleziona una data") piuttosto che xyz pure. – Nigel

1

ScottE è corretto. Ho un elenco a discesa popolato da un database e ho appena aggiunto un elemento in cima all'elenco e gli ho dato un valore di "". Quando si convalida l'input è sufficiente verificare che il dropdownlist sia vuoto. È anche possibile codificare l'elenco se non cambia mai e aggiungere un elemento in alto con un valore vuoto, esempio di seguito.

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