Validación de JQuery Ignorar campos de formulario con valores de campo de formulario predeterminados

Tenemos un formulario que usa el Complemento de validación de JQuery y me gustaría ignorar cualquier valor de campo de formulario que no se haya cambiado de sus valores predeterminados.

Por ejemplo, tenemos un formulario de actualización de tarjeta de crédito y solo mostramos los últimos cuatro números de la tarjeta de crédito por seguridad. Se ve algo como esto:

**** 5629

Este valor predeterminado será diferente para cada usuario ya que las últimas cuatro de sus tarjetas de crédito serán diferentes.

Si el usuario no modifica el valor predeterminado de su tarjeta de crédito durante la actualización de su perfil, nos gustaría omitir la ruta de validación en este campo de formulario, ya que obviamente no se validaría como un número de tarjeta de crédito válido.

Aquí está nuestro fragmento de validación actual:

card_number: {
  required: true,
  creditcard: true
}

messages: {
  card_number: {
    required: "Please enter a <strong>valid credit card number</strong>.",       
  }

Y aquí está el campo del formulario:

<input type="text" name="card_number" id="card_number" title="Your credit card number." value="************ 5629" />

¿Cómo podemos ignore la validación de cualquier valor de campo de formulario que no haya cambiado de sus valores predeterminados?

Gracias.

===============================================

NUEVA NOTA PARA ANDREW:

Creo que nos encontramos con un pequeño problema debido a la forma en que validamos el TIPO de la tarjeta de crédito.

Aquí está el fragmento completo junto con su solución inicial:

card_number: {
  creditcardtypes: function() {
    // return an object with a property named the same as the pay method
    var result = new Object();
    var propertyName = $('select[name="pay_method"]').val().toLowerCase();
    var propertyValue = 1;
    eval("result."+propertyName+"='"+propertyValue+"'");
    return result;
  },
  ccnotdefault: true,
  required: true
},

¿Cómo podemos acomodar también la regla del TIPO de tarjeta de crédito? En este momento, la validación falla porque el valor predeterminado el valor de la tarjeta de crédito no es un tipo de tarjeta de crédito válido.

Gracias de nuevo Andrés.

================================================

CAMPOS DEL FORMULARIO:

          <!--- PAYMENT METHOD FIELD --->
      <tr>
        <td style="padding-top:15px; text-align:right; width:45%;"><label for="pay_method">&nbsp;Payment Method:
          <span class="orderlineredsm"><strong> * </strong></span></label></td>
        <td style="padding-top:15px; text-align:left; width:55%;" colspan="2" align="left" id="pmethod">
          <select name="pay_method" id="pay_method" class="highlightme required" style="width: 115px;" onchange="jQuery('#card_number').valid()" title="Your Payment Method.">
              <option value="Visa" <cfif form.pay_method EQ "Visa">selected="selected"</cfif>>Visa</option>
              <option value="Mastercard" <cfif form.pay_method EQ "Mastercard">selected="selected"</cfif>>Mastercard</option>
              <option value="Amex" <cfif form.pay_method EQ "Amex">selected="selected"</cfif>>Amex</option>
              <option value="Discover" <cfif form.pay_method EQ "Discover">selected="selected"</cfif>>Discover</option>
              <option value="Diners" <cfif form.pay_method EQ "Diners">selected="selected"</cfif>>Diners</option>
          </select>
        </td>
      </tr>
      <!--- END PAYMENT METHOD FIELD --->

      <!--- CARD NUMBER FIELD --->
      <tr>
        <td style="text-align:right; width:45%;"><label for="card_number">&nbsp;Credit Card Number:
          <span class="orderlineredsm"><strong> * </strong></span></label></td>
        <td style="text-align:left; width:55%;" colspan="2" align="left" id="cnumber">
          <input type="text" name="card_number" id="card_number" class="highlightme" style="width: 130px;" maxlength="19" title="Your credit card number." value="************<cfoutput>#form.card_number#</cfoutput>" onfocus="clearText(this)" onblur="clearText(this)" />
          &nbsp;<span class="create-tooltip" title="For your protection and security, only the <strong>last four digits of your credit card number</strong> are shown.<br /><br /><strong>NOTE:</strong> Only change if you are updating your credit card number."><img src="/public/images/help_25.png" style="margin-bottom:1px;" alt="help" width="25" height="25" /></span>
        </td>
      </tr>
      <!--- CARD NUMBER FIELD --->

================================================== ========

POSIBLE SOLUCIÓN

card_number: {
  ccnotdefault: function(){ return $('#pay_method').val(); },
  required: true
},

jQuery.validator.addMethod("ccnotdefault", function(value, element, param) {
  // if the element is optional, don't validate 
  return this.optional(element) ||
  // or if the value is equal to the default value
  (value === element.defaultValue || 
  // or, finally, if the cc number is valid
  jQuery.validator.methods.creditcard2.call(this, value, element, param));
}, jQuery.validator.messages.creditcard);

http://www.ihwy.com/labs/downloads/jquery-validate-creditcard-2/jquery.validate.creditcard2-1.0.1.js

preguntado el 12 de junio de 12 a las 09:06

¿Qué está tratando de lograr con el creditcardtypes método de validación? Además, no creo que funcione correctamente a menos que use addMethod. ¿Hay alguna manera de que pueda compartir su formulario HTML completo? -

creditcardtypes es parte de los métodos adicionales predeterminados de los complementos. Todo lo que hace es validar un cuadro de selección de formulario (Visa, Mastercard, AMEX, Discover) contra el número de tarjeta de crédito ingresado. Se asegura de que si el usuario selecciona visa, se haya ingresado un número de visa válido, y si no, alerta al usuario. -

Probablemente podría quitar esa parte, pero si prefiero dejarla, ya que eso es lo que mi página de acción espera actualmente. -

Se agregaron campos de formulario para mayor claridad. -

Andrew, creo que lo arreglé. Eche un vistazo a mis anuncios anteriores y avíseme si le parece bien. Parece funcionar en mi extremo. Agregué un elemento param a la llamada y a su método addMethod, luego lo apunté al método creditcard2 actualizado (el enlace también se proporciona arriba). Por favor, hágame saber sus pensamientos. Gracias. -

1 Respuestas

Escribiría una regla personalizada para esto que llame a la regla de tarjeta de crédito predeterminada pero que también tenga en cuenta el valor predeterminado del campo:

$.validator.addMethod("ccnotdefault", function(value, element) {
    // if the element is optional, don't validate 
    return this.optional(element) ||
       // or if the value is equal to the default value
       (value === element.defaultValue || 
       // or, finally, if the cc number is valid
       $.validator.methods.creditcard.call(this, value, element));
}, $.validator.messages.creditcard);

$(document).ready(function() {
    $("#myform").validate({
        rules: {
            card_number: {
                ccnotdefault: true,
                required: true
            }
        }
    });
});

Ejemplo: http://jsbin.com/ejonid/2/

Respondido el 12 de junio de 12 a las 16:06

@user1113083: ¡No hay problema! Encantado de ayudar. - Andrew Whitaker

Hola Andrew, agregué otro comentario a mi publicación original. Nos encontramos con un problema técnico con la validación del tipo de tarjeta de crédito. ¡Gracias de nuevo! - goxmedia

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.