2011-06-14 9 views
5

Tengo un formulario con quizás 10 campos. Uno de esos campos es una casilla de verificación, desmarcada por defecto, y varios campos en el formulario solo se habilitan + requieren si esa casilla está marcada. He descubierto con éxito cómo invocar ValidatorEnable (requiredFieldValidator, true) para manejar esto (he consultado numerosas preguntas de StackOverflow sobre el tema).Habilitar, pero no activar, un Visor obligatorio usando jQuery/javascript

function toggleStatus() { 
      if ($('#ctl00_main_chkContactMe').is(':checked')) { 
       $('#elementsToOperateOn :input').removeAttr('disabled'); 
       $('#elementsToOperateOn label').removeClass('off'); 
       ValidatorEnable($("[id$=RequiredFieldValidator1]")[0], true); 
       ValidatorEnable($("[id$=RequiredFieldValidator2]")[0], true); 
      } else { 
       $('#elementsToOperateOn :input').attr('disabled', true); 
       $('#elementsToOperateOn label').addClass('off'); 
       ValidatorEnable($("[id$=RequiredFieldValidator1]")[0], false); 
       ValidatorEnable($("[id$=RequiredFieldValidator2]")[0], false); 
      } 
     } 

Sin embargo, tengo un problema que aún no veo direccionado. Cuando mi usuario marca la casilla y los campos ahora están habilitados y son necesarios, mi validador inmediatamente activa su mensaje "Este campo es obligatorio". Esto es antes de que el usuario incluso haya tenido la oportunidad de escribir algo, por lo que no es una experiencia de usuario muy buena. ¿Qué puedo decirle al Validador para que sepa, aunque lo estoy habilitando, que "este campo todavía no se ha enfocado en absoluto, así que no muestre un mensaje de error hasta que alguien lo haya dejado deliberadamente vacío"?

Respuesta

10

que tenían el mismo problema y lo resolvió mediante este código:

var myValidator = document.getElementById('<%=myValidator.ClientID %>'); 
ValidatorEnable(myValidator, true); 
myValidator.isvalid = true; 
ValidatorUpdateDisplay(myValidator); 

La tercera fila puede parecer un poco extraño, pero el validador más tarde será validado en cualquier cambio o en la publicación de la página.

También puede probar esta función:

function myValidatorEnabler(validator, enable) { 
    validator.enabled = enable; 
    ValidatorUpdateDisplay(validator); 
} 
0

Ver por defecto el campo requerido Validador es Enabled (si no, que sea). Así que use solo aquellas condiciones que lo requieran para deshabilitar y listo.

Cuestiones relacionadas