2009-07-05 38 views
7

Estoy intentando configurar algo de validación, de modo que si el botón de opción 'Sí' está marcado, otro control, que es una lista desplegable, debe validarse para asegurarse de que no está configurado a la primera entrada predeterminada en la lista "Seleccione ...".jQuery.Validate Validación Condicional RadioButton y DropDownList

He intentado muchas combinaciones pero no he podido hacer que esto funcione. El mensaje de validación muestra si la casilla de verificación está marcada o no.

He aquí algún código!

Este es un método personalizado que tengo que utilizo para validar mis listas desplegables. (Esto funciona bien para la validación sencilla DDL)

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

Para hacer la validación basada en la casilla He añadido una regla de 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" 
       } 
      } 
     }); 
    }); 

Y aquí están los controles.

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

Cualquier idea sería muy apreciada.

Muchas Gracias

Respuesta

23

Mientras la primera opción de la lista desplegable tiene un valor en blanco (<option value="">some text</option>), la siguiente regla funcionará:

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

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

+0

pero no lo hace tiene un "Por favor seleccione ..." y esto tiene que seguir siendo – andyJ

+0

Sólo el valor de la opción tiene que estar en blanco, no el texto. Si el control no puede hacer esto, use jquery para cambiar el valor a blanco en listo. – ScottE

-1

Esto no significa trabajo con la versión actual de Validate.js (v 1.7)

También pude probar que el concepto no funciona:

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

Esto también falla.

+1

No, descarte eso. Resultó que estaba verificando una derivada de xyz (preestablecida con texto como "seleccione una fecha") en lugar de xyz puro. – Nigel

1

ScottE es correcto. Tengo una lista desplegable poblada de una base de datos y acabo de anexar un elemento en la parte superior de la lista y le di el valor "". Cuando valida la entrada simplemente valide contra la lista desplegable que está en blanco. También podría codificar la lista si nunca cambia y agregar un elemento a la parte superior con un valor en blanco, ejemplo a continuación.

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