2009-03-23 4 views
6

Mi chiedo se sia possibile avere il plugin jQuery Validator per convalidare elementi che non esistono ancora nella dom quando le regole sono inizialmente impostate.jquery validate su elementi non ancora creati

Chiamare il .Rules (metodo "aggiungi", therules) allega solo le regole agli elementi attualmente esistenti nella dom. Se dovessi creare un po '. La convalida non viene attivata. qualche idea?

Homepage del validatore che sto usando: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Nuovi elementi sono stati creati tramite http://ejohn.org/blog/javascript-micro-templating/

Fondamentalmente c'è una chiamata AJAX e il server restituisce un gruppo di JSON, questo JSON è alimentato (Ajaj?) attraverso con il motore di template del resig. Un modello di esempio si presenta in questo modo:.

<script type="text/html" id="ProductsTemplateEdit"> 
    <td> 
     <input type="hidden" value="<#= item.ID #>" id="Edit.ID" name="Edit.ID" /> 
     <input type="text" value="<#= item.Price#>" id="Edit.Price" name="Edit.Price" /> 
    </td> 
</script> 

I valori sono ovviamente riempiti tramite il JSON che viene passato in

Vorrei anche ricordare che sto usando il quadro di convalida xval, che fondamentalmente genera automaticamente il jquery convalidare le regole per me: http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/

+0

Come stai aggiungendo i tuoi articoli? puoi fornire un esempio di codice? Puoi anche collegarti al tuo plugin jQuery Validator nella tua domanda? – bendewey

+0

aggiornamento domande con ulteriori informazioni – ChadT

risposta

2

Ok, prova due. Cosa sta aggiungendo i tuoi elementi in modo dinamico? Non puoi semplicemente mettere il .Rules ("aggiungi",) allo stesso codice?

+0

Attualmente sto usando questo metodo al momento, ma speravo che ci sarebbe stato un modo migliore (usando qualcosa di simile agli eventi dal vivo come suggerito prima). – ChadT

+0

Penso che il tuo metodo attuale sia più "corretto". Da quanto hai descritto finora, sembra che tu stia accadendo parecchio sul lato client. Hai iniziato a notare il calo delle prestazioni? L'ultima volta che ho ascoltato eventi dal vivo può quasi uccidere la performance. –

0

Hai voglia di guardare in jQuery 1.3 di nuova Live Events

+1

Sono a conoscenza di eventi dal vivo, ma non vedo come possono essere adattati per l'uso con jquery validate – ChadT

+0

a partire dalla v1.3.1 live() supporta solo i seguenti "possibili valori di evento: clic, dblclick, mouse, mouseup, mouse mouse, mouseover, keydown, keypress, keyup " – bendewey

+0

Mi spiace, non conosco completamente gli interni di Validator, ma non dovrebbe esserci una specie di evento personalizzato? In tal caso, è possibile utilizzare Live Events in quel caso. –

2

Ehi, non sono sicuro che si tratti di un trucco non maleducato, ma ha funzionato per me. Prima di questo, stavo facendo un each() sul selector e mi sono imbattuto nello stesso problema che hai con gli elementi Ajaxed appena creati.

al passaggio del mouse evento dal vivo sembra aver fatto il trucco, concesso ur non essere pazzo con il css:

// >>> MSG/Comment form validator, now and forever... 
    $('form.streamForms').live('mouseover', function(){ 
     $(this).validate({ 
      rules: { 
       text: "required" 

      }, 
      messages: { 
       text: " " 
      } 
     });  
    }); 

Speranza che aiuta!

+1

Oppure, puoi ascoltare "click" invece di "mouseover" come in: [Convalida un modulo caricato AJAX] (http://forum.jquery.com/topic/validate-validating-an-ajax-loaded-form) –

+0

Questo non si attiva se qualcuno passa attraverso i campi, live() non supporta neanche l'evento focus. – ChadT

0

Ecco come ho gestito questo. Per prima cosa ho creato il mio oggetto di validazione.

 

    var myvalidations = {}; 
    myvalidation.registerform = function() { $("#registerform").validate({ 
      submitHandler: function(form) { 
       $(form).ajaxSubmit(optionspersonal); 
       //submitReg(); 
      }, 
        rules: { 
       firstname: { 
        required: true, 
        minlength: 5, 
        maxlenght: 22 
       }, 
        messages: { 
          firstname: { 
           required: "Tell us what to call you by.", 
        minlength: "Your username must consist of at least 5 characters" 
          } 
        } 
      }); 
     } 

Ora, ogni volta che si crea il modulo di assicurarsi che ha un ID su di esso o in qualche modo fare riferimento a esso e semplicemente chiamare la funzione subito dopo averlo creato.

 

    //create my content 
    $('.content').html('--fields etc--'); 
    //add validation 
    myvalidation.registerform(); 

Eventuali ulteriori suggerimenti sono benvenuti; ma penso che in fondo questo sia l'approccio giusto.