jQuery Validate Plugin - Attiva la convalida di un singolo campo


89

Ho un modulo che può essere opzionalmente precompilato tramite Facebook Connect. Una volta che un utente si connette, il suo nome e il suo indirizzo email vengono inseriti automaticamente. Il problema è che questo non attiva la convalida remota per verificare se l'email esiste già.

C'è un modo per chiamare la convalida solo su quel campo? Qualcosa di simile a:

$('#email-field-only').validate()

sarebbe un'idea. Ho cercato tra i documenti senza fortuna.

Risposte:


146

Questo metodo sembra fare quello che vuoi:

$('#email-field-only').valid();

4
Nota: il nome dell'elemento del modulo funziona anche con questa funzione, vale a dire $('input[name=email-field-only]').valid();funziona anche
Raptor

1
qual è il problema? quando utilizzo questo metodo la mia convalida si interrompe
nakajuice

2
Questa soluzione convalida l'intero modulo, mostrando i messaggi di errore per tutti i campi.
Pablo

@haemhweg, forse non hai chiamato il metodo .validate () prima di provare a utilizzare .valid () ? I documenti: jqueryvalidation.org/valid
userfuser

1
L'API è cambiata, utilizza la risposta fornita da Paul
Anima-t3d

23

Usa Validator.element():

Convalida un singolo elemento, restituisce true se è valido, false in caso contrario.

Ecco l'esempio mostrato nell'API:

var validator = $( "#myform" ).validate();
validator.element( "#myselect" );

.valid()convalida l'intero modulo, come altri hanno sottolineato. L'API dice:

Controlla se il modulo selezionato è valido o se tutti gli elementi selezionati sono validi.


20

Per qualche ragione, alcuni degli altri metodi non funzionano fino a quando il campo non è stato focalizzato / sfocato / modificato, o è stato tentato un invio ... questo funziona per me.

$("#formid").data('validator').element('#element').valid();

Ho dovuto scavare nello script jquery.validate per trovarlo ...


1
Questo è quello che ha funzionato per me, ho anche aggiunto .valid()alla fine quindi mi ha cercato $("#Form").data('validator').element('input[name=__Suburb]').valid(); credo che se non lo selezioni per ID potrebbe essere richiesto.
Mihai P.

2
Non credo .valid()appartenga alla fine dell'espressione. La .element()funzione restituisce un risultato booleano ( docs | src ). Quando provo a chiamare .valid () ricevo il messaggio di errore: "Uncaught TypeError: $(...).data(...).element(...).validnon è una funzione"
KyleMit

Hai allegato il validatore al form? sono passati alcuni anni da quando ho usato la convalida di JQuery ... Quindi l'API per questo potrebbe essere cambiata. A quel tempo ho dovuto lavorare attraverso gli interni per trovare quanto sopra. Non è stato pubblicato nella documentazione, quindi la struttura potrebbe essere cambiata dall'ultima volta che ho guardato.
Tracker1

16
$("#FormId").validate().element('#FieldId');

2
Preferisco questo metodo, è un bel 1 liner. Funziona alla grande, grazie.
Andy

1
Questa è la risposta perfetta senza errori con un tipo di ritorno valido
Kaushik Thanki

7

Quando imposti la tua validazione, dovresti salvare l'oggetto validatore. puoi usarlo per convalidare i singoli campi.

<script type="text/javascript">
var _validator;
$(function () {    
     _validator = $("#form").validate();   
});

function doSomething() {    
     _validator.element($('#someElement'));
}
</script> 

- croce postata con questa domanda simile


7

Se desideri convalidare un singolo campo modulo, ma non desideri che l'interfaccia utente venga attivata e visualizzi eventuali errori di convalida, puoi considerare di utilizzare il metodo Validator.check () che restituisce se il campo specificato supera o meno la convalida.

Ecco un esempio

var validator = $("#form").data('validator');
if(validator.check('#element')){
    /*field is valid*/
}else{
    /*field is not valid (but no errors will be displayed)*/
}

0

nel caso in cui desideri eseguire la convalida di "alcuni elementi" (non tutti gli elementi) nel modulo. Puoi utilizzare questo metodo:

$('input[name="element-one"], input[name="element-two"], input[name="element-three"]').valid();

Spero che aiuti tutti :)

MODIFICATO


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.