Ajuda com Plugin Jquey Validate

6 respostas
I

Bom dia pessoal, estou precisando de ajuda.

Estou em um projeto com Struts 1 e Hibernate e estou usando o plugin Jquery Validate para fazer as validações no lado cliente.
Algumas validações o plugin já trás, só que eu estou precisando de uma regra de validação que eu não se existe no plugin ou se é possível criar.

Tenho 2 campos de inscrição: eu preciso fazer com que pelo menos um deles seja obrigatoriamente preenchido, colocar um campo como obrigatório é fácil com esse plugin, só que eu estou querendo definir que apenas um dos dois campos precisa estar preenchido no plugin. Validar com javascript sem usar o plugin é simples, só que eu gostaria de validar tudo através dele para poder manter o padrão das mensagens de erro.

Tenho certeza que alguém já tentou fazer isso.

Desde já agradeço e aguardo respostas.

6 Respostas

I

Ninguém pode me ajudar?

W

Se vc nao quiser que um campo sera validado eh soh nao adicionar uma regra para ele.

Exemplo
Eu tenho dois campos, text1 e text2 eu nao quero que o text2 seja validado, apenas o text1 e eu defini o text1 como obrigatorio (nao pode deixar em branco).

HTML:

<form id="myform">
      Text1: <input type="text" id="text1" name="text1" size="10" /><br>                
      Text2: <input type="text" id="text2" name="text2" size="10" /><br>
      <input type="button" id="submitbutton" value="Validar" type="submit"/>
      <br>    
      <span id="validationStatus"/>
</form>

Javascript:

$(document).ready(function() {

        var _formRules = {
            text1: {
                required: true
            }
        };
                        
        var _errorMessages = {
            text1: {
                required: "Error: Campo deve ser preenchido!"
            }
        }                
                        
        $("#submitbutton").click(function() {                    
            var _handler = $("#myform").validate({
                rules: _formRules,
                messages: _errorMessages
            });
            
            var status = $("#validationStatus");                         
        
            if(_handler.checkForm()) {
                status.text("validation ok");
            } else {
                status.text("validation error");
            }                     
        });
});&#8203;

Veja o exemplo rodando aqui:
http://jsfiddle.net/cSUuf/4/

Eh isso que vc esta querendo fazer ?

//Daniel

I

Fala windsofhell, obrigado por responder.

Não é isso que eu estou tentando fazer não, o que estou precisando fazer e não sei se esse plugin me permite é o seguinte:

tenho dois campos: text1 e text2

eu sou obrigado a preencher pelo menos um dos dois (tanto faz se é o text1 ou o text2), se eu deixar os dois em branco é pra bater na validação.

exemplos:

text1 preenchido e text2 vazio -> aceita
text2 preenchido e text1 vazio -> aceita
text1 e text2 preenchidos -> aceita
text1 e text2 vazios -> não aceita (mensagem = por favor preencha ao “menos” um dos dois campos)

Não sei se o plugin aceita que eu faço isso de alguma forma através dele, se é possível, não sei como fazer.

entendeu agora a minha dúvida?

desde já agradeço e aguardo resposta.

W

igortsouza:
Fala windsofhell, obrigado por responder.

Não é isso que eu estou tentando fazer não, o que estou precisando fazer e não sei se esse plugin me permite é o seguinte:

tenho dois campos: text1 e text2

eu sou obrigado a preencher pelo menos um dos dois (tanto faz se é o text1 ou o text2), se eu deixar os dois em branco é pra bater na validação.

exemplos:

text1 preenchido e text2 vazio -> aceita
text2 preenchido e text1 vazio -> aceita
text1 e text2 preenchidos -> aceita
text1 e text2 vazios -> não aceita (mensagem = por favor preencha ao “menos” um dos dois campos)

Não sei se o plugin aceita que eu faço isso de alguma forma através dele, se é possível, não sei como fazer.

entendeu agora a minha dúvida?

desde já agradeço e aguardo resposta.


Aha! ok!
Da pra fazer sim, vc tem que definir uma regra (rule) condicional, vc vai precisar fazer algo do tipo:

rules: {
  text1: {
    required: function(element) {
         // text1 soh vai ser "required" se text2 for vazio
	var text2_value = $("#text2").val();
	return ($.trim(text2_value).length <= 0);
  },
  text2: {
    required: function(element) {
         // text2 soh vai ser "required" se text1 for vazio
	var text1_value = $("#text1").val();
	return ($.trim(text1_value).length <= 0);
   }
}

Eu atualizei o exemplo no JsFiddler para vc testar, ai vai o link: http://jsfiddle.net/cSUuf/15/

//Daniel

I

Boa noite windsofhell, era isso mesmo que eu estava querendo fazer.
Muito obrigado pela ajuda, tem algum lugar para eu dizer que o tópico foi resolvido.

Aproveitando o tópico sobre esse tema, vou te perguntar mais duas coisas:

  1. é possível usar esse plugin com validação indo ao banco?

Exemplo: algum campo que não permita valores duplicados, como cnpj, cpf, etc, digamos que eu fosse ao banco de dados usando ajax e essa informação já existisse no mesmo e não fosse possível cadastrar o valor digitado nesse campo, teria como fazer uma validação desse tipo usando o plugin jquery. Uma validação que poderia ser chamada no onchange no campo ou no submit do form. É possível fazer uma requisicao ajax e de acordo com a resposta, retornar um resultado para o cliente, usando o jquery validator?

  1. Se eu tiver uma quantidade indefinida de campos input com o mesmo valor para o atributo name, digo indefinida, pois posso adicionar novos campos através de um botao,
    como eu faria para a validação do plugin funcionar? Tem como fazer uma validação de uma lista de elementos com o mesmo valor no atributo name?
W

igortsouza:
Boa noite windsofhell, era isso mesmo que eu estava querendo fazer.
Muito obrigado pela ajuda, tem algum lugar para eu dizer que o tópico foi resolvido.

Sem problemas. Legal que deu certo!
Entao, eh soh editar o titulo do seu post e colocar [RESOLVIDO] na frente do titulo. Nao apague o titulo, soh adicione o resolvido na frente. :slight_smile:

Da mesma forma que vc adicionou “required”, existe a opcao “remote” que faz isso para vc:
http://docs.jquery.com/Plugins/Validation/Methods/remote#options

Aqui tem um exemplo:

Nunca fiz algo parecido com JQuery, mas parece ser possivel fazer usando CSS selectors, se vc tiver uma classe .requiredfield e adicionar uma regra que todos os campos que possuem essa classe sao required:

$(".requiredfield").rules("add", { 
  required:true
});

Ai se vc adiciona um campo dinamicamente (como vc disse clicando num botao), o que vc pode fazer eh atribuir uma css class para o seu novo campo, por exemplo: “.requiredfield”, isso vai fazer com que quando vc chamar a funcao para validar vai automaticamente validar todos os campos que possuem essa classe.

Se vc tiver um campo dessa forma, vai ser validado:

<input type="text" id="text1" name="text1" size="10" class=".requiredfield" />

//Daniel

Criado 14 de junho de 2012
Ultima resposta 23 de jun. de 2012
Respostas 6
Participantes 2