2010-04-28 17 views
17

Sto utilizzando il plugin di validazione jquery per convalidare un modulo di registrazione.jquery.validation - come ignorare i valori predefiniti durante la convalida dei campi obbligatori

Ogni campo di inserimento testo ha istruzioni pre-riempite come valori nella casella di immissione

es: un testo-input box id = 'Nome', il valore di default verrà impostato su 'Inserisci il tuo nome'. Ho incollato sotto il codice di esempio:

<input type="text" id="Name" value="Enter Your Name" onfocus="if(this.value == 'Your Name'){this.value = '';}" type="text" class="required" onblur="if(this.value == ''){this.value='Your Name';}" size="25" /> 

cosa ho bisogno di sapere è come specificare la regola di convalida in modo tale che il plugin genera un errore di campo obbligatorio se la casella di input contiene sia il messaggio predefinito o valori vuoti.

Aiuto molto apprezzato.

risposta

5

Ho trovato un modo per aggirare il problema creando una convalida personalizzata usando validator.addMethod, che è davvero facile.

ho incollato un frammento del mio blocco di convalida di seguito:

//1. Define custom validation 
    $(document).ready(function() 
    { 
    jQuery.validator.addMethod("defaultInvalid", function(value, element) 
    { 
    switch (element.value) 
    { 
     case "Your Name": -- this will be the default value in the Name text box 
     if (element.name == "Your Name") 
      return false; 
    } 
    } 
    //2. Include custom validation in the rules for your element 
    $("#aspnetForm").validate(
    { 
     rules: 
     { 
     Name: "required defaultInvalid" 
     }, 
     messages: 
     { 
     Name: "Please input your name" 
     } 
    }) 
    } 

ho usato lo stesso per tutti gli elementi che hanno valori di default nella forma. Funziona alla grande

2

per me quanto sopra lavorato solo con le seguenti modifiche:

jQuery.validator.addMethod("defaultInvalid", function(value, element) 
{ 
    switch (element.value) 
    { 
     case "Your Name": 
      if (element.name == "element_name") return false; 
      break; 
     default: return true; 
      break; 
    } 
}); 
0

Penso che è necessario aggiungere il caso di "default" per ottenere questo funziona correttamente:

 
jQuery.validator.addMethod("defaultInvalid", function(value, element) { 
     switch (element.value) { 
      case "$defaultText": 
       if (element.name == "$defaultText") 
        return false; 
       break; 
      default: 
      return true; 
      break; 
     } 
}); 
18

credo che questo sia meglio:

jQuery.validator.addMethod("defaultInvalid", function(value, element) 
{ 
    return !(element.value == element.defaultValue); 
}); 
+2

O semplicemente restituire! (Element.value == element.defaultvalue); – AntonioCS

+0

Per i nuovi arrivati ​​a questa discussione, sostituire la risposta sopra nella risposta accettata di conseguenza, righe 4-12. Ottimo lavoro ragazzi. – deflime

0
$.validator.addMethod("defaultInvalid", function(value, element, param){ 
     var r = $(element).rules(); 
     var req=(this.objectLength(r))?r.required:false; // OR may be var req=r.required; // true, false or undefined. 
     return !req || (value!=param); 
    },$.validator.messages.required); 

...

,rules:{ 
      message: { 
       defaultInvalid:$('#message').attr('placeholder') 
      } 
     } 

Tale funzione prende in considerazione i casi di & campi "obbligatori" "opzionali".

Espressione "! Req" sostituisce volutamente "this.optional (elemento)" perché in alcuni casi viene visualizzato il messaggio di errore "discrepanza di dipendenza".

2

Se si desidera aggiungere un messaggio di errore personalizzato per giustificare questo.

jQuery.validator.addMethod("defaultInvalid", function(value, element) { 
    return !(element.value == element.defaultValue); 
}, 'Custom Error Message for this field'); 
+0

Grazie ... esattamente quello che stavo cercando! – brainondev

0

Ho apportato alcune patch a jquery.validationEngine per consentire di ignorare alcuni campi di input per alcuni moduli complessi. Ho fatto le seguenti modifiche:

  • aggiungere il supporto per jquery.dropkick posizione convalida selezionare Skining
  • Aggiungi selezionare campo non valido per l'ingresso del valore ve_invalid (per essere in grado di visualizzare direttiva senza che sia una selezione valida)
  • Aggiungi hideAllInstant per rimuovere la convalida senza alcun ritardo
  • Aggiungi supporto per jquery.elemento simpleImageCheck se l'ingresso originale è nascosto, Zona tipo di simpleImageCheck invece
  • Aggiungi classe skipValidate per evitare di convalida alcuni campi senza disabilitare la loro
  • errore Fix quando non può competere con prompt_err indefinita, destinazione stava generando un errore
  • aggiungere Clearfield supporto per evitare la convalida jquery.clearField.js
  • aggiungere validateHiddenFields, la convalida sul campo nascosti e non nascosti

Nel tuo caso è possibile utilizzare la modifica per la classe skipValidate per eseguire questa. Potete trovare lo script patch qui insieme con il filtro inglese (fr uno è anche disponibile):

jquery.validationEngine.js Patched

jquery.validationEngine-en.js Patched

dovrei presenta i cambiamenti nel mozzo git, ma non ha avuto il tempo di fallo adesso.

Jerome Godbout

Panthera Dental

1

basta aggiungere questo dopo la sezione regola

onfocusout: function(element) { $(element).valid(); }

e sarà tutto a posto.

Problemi correlati