jQuery Validate Plugin - validação de gatilho de campo único

89

Eu tenho um formulário que pode opcionalmente ser pré-preenchido via Facebook Connect. Depois que um usuário se conecta, seu nome e e-mail são preenchidos automaticamente. O problema é que isso não aciona a validação remota para verificar se o e-mail já existe.

Existe uma maneira de chamar a validação apenas nesse campo? Algo como:

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

seria ideia. Procurei nos documentos sem sorte.

Ryan
fonte

Respostas:

146

Este método parece fazer o que você deseja:

$('#email-field-only').valid();
Gregoire
fonte
4
Nota: o nome do elemento do formulário também funciona com esta função, ou seja, $('input[name=email-field-only]').valid();também funciona
Raptor
1
qual é o problema? quando eu uso esse método, minha validação é interrompida
nakajuice
2
Esta solução valida todo o formulário, mostrando as mensagens de erro para todos os campos.
Pablo
@haemhweg, talvez você não tenha chamado o método .validate () antes de tentar usar o .valid () ? Os documentos: jqueryvalidation.org/valid
userfuser
1
A API mudou, use a resposta fornecida por Paul
Anima-t3d
23

Use Validator.element():

Valida um único elemento, retorna verdadeiro se for válido, falso caso contrário.

Aqui está o exemplo mostrado na API:

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

.valid()valida todo o formulário, como outros apontaram. A API diz:

Verifica se o formulário selecionado é válido ou se todos os elementos selecionados são válidos.

Paulo
fonte
20

Por alguma razão, alguns dos outros métodos não funcionam até que o campo tenha sido focalizado / manchado / alterado, ou um envio tenha sido tentado ... isso funciona para mim.

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

Tive que vasculhar o script jquery.validate para encontrá-lo ...

Tracker1
fonte
1
Isso é o que funcionou para mim, também adicionei .valid()no final para que procure por mim $("#Form").data('validator').element('input[name=__Suburb]').valid(); , acredito que se você não selecionar por ID isso pode ser necessário.
Mihai P.
2
Não acho que .valid()pertença ao final da expressão. A .element()função retorna um resultado booleano ( docs | src ). Quando tento chamar .valid (), recebo a mensagem de erro: "Uncaught TypeError: $(...).data(...).element(...).validnão é uma função"
KyleMit
Você anexou o validador ao formulário? já se passaram alguns anos desde que usei a validação JQuery ... Portanto, a API para isso pode ter mudado. Na época, tive que trabalhar com os internos para encontrar o que estava acima. Não foi publicado na documentação, então a estrutura pode muito bem ter mudado desde a última vez.
Tracker1,
16
$("#FormId").validate().element('#FieldId');
Aslanpayi
fonte
2
Eu prefiro este método, é um bom revestimento. Funciona muito bem, obrigado.
Andy
1
Esta é a resposta perfeita sem nenhum erro com tipo de retorno válido
Kaushik Thanki
7

Ao configurar sua validação, você deve salvar o objeto validador. você pode usar isso para validar campos individuais.

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

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

- postado cruzado com esta pergunta semelhante

ShaneBlake
fonte
7

Se você deseja validar um campo de formulário individual, mas não deseja que a IU seja acionada e exiba quaisquer erros de validação, você pode considerar o uso do método Validator.check () que retorna se o campo fornecido passar na validação ou não.

Aqui está um exemplo

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

caso você queira fazer a validação de "alguns elementos" (não todos os elementos) em seu formulário. Você pode usar este método:

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

Espero que ajude a todos :)

EDITADO

Peps
fonte
-6
$("#element").validate().valid()
John
fonte