jQuery Validate + vRaptor
Versão vRaptor: 3
versão jQuery: jquery-1.7.2.js
versão jQuery UI: jquery-ui-1.8.20.custom.min.js
Não sei se essa duvida é por causa vRaptor mesmo …
Estou fazendo a validação com jQuery no vRaptor, sobre uma tela de cadastro de usuário, pesquisando aqui no GUJ achei
um tópico que resolvesse a primeira parte de meu problema, o tópico:
[RESOLVIDO] Jquery Validate + Vraptor
Porém deparei com uma situação um pouco diferente que não consegui resolver.
No casso da senha, para redigitar a senha como ficaria?
No meu exemplo
"usuario.senha": {
required: true
},
repete_senha:{
required: true,
equalTo: "#usuario.senha"
}
assim não funcionou …
como seria então ?
Você cria um campo para ele redigitar a senha, onde você verifica se são iguais.
<input type="password" name="usuario.senha" id="senhaQueEuVouUsar" />
<input type="password" name="redigitar_senha" id="red_senha" />
// ...
"usuario.senha": {
required: true
},
"redigitar_senha":{
// não precisa do required, pois o outro já é required...
equalTo: "#senhaQueEuVouUsar"
}
Ahhh sim,
Desse jeito ele vai pelo id do campo, pensei que era pelo name.
Resolvido, obrigado Rafael Guerreiro .
Mas se você fizer um teste, isso ai não vai funcionar no IE8. Pois ele não consegue trabalhar muito bem quando o name tem caractere especial (o ponto, no caso).
Então, para funcionar, você deve fazer a chamada pelo ID (cuidado para não colocar caractere especial no ID).
Ai fica dessa forma:
<form id="formulario" action="<c:url value="/grupo/" />" method="post" style="width: 100%;">
<fieldset>
<input type="text" id="idDoInput" name="obj.atributo" />
</fieldset>
</form>
<script type="text/javascript">
$(document).ready( function() {
$('#formulario').validate();
$('#idDoInput').rules('add',{
required:true,
messages:{
required:'Este campo é obrigatório.'
}
});
});
</script>
O JQuery deveria normalizar isso, Rafael… Nunca tive problema usando names com pontos…
No caso do IE acontece.
É horrível mesmo.
Tem uma série de coisas que o jQuery não faz.
Por exemplo no firefox: se você definir um elemento como display: none; e com jQuery você der um $(’#idDoElemento’).show(); não vai funcionar.
Já no IE, chrome e outros, funciona.
se vc coloca o display:none no css (e não no style) funciona sim…
o propósito do JQuery eh vc escrever a mesma coisa pra funcionar em todos os browsers… se vc está com uma versão razoavelmente atualizada, ele deveria normalizar tudo isso.
[quote=Lucas Cavalcanti]se vc coloca o display:none no css (e não no style) funciona sim…
[/quote]
Pode ser exatamente esse o problema… Mas isso seria um bug, não?
[quote=Lucas Cavalcanti]
o propósito do JQuery eh vc escrever a mesma coisa pra funcionar em todos os browsers… se vc está com uma versão razoavelmente atualizada, ele deveria normalizar tudo isso.[/quote]
Estranho, pois eu uso a versão atual do jQuery e do plugin validator… Atualmente estou desenvolvendo uma aplicação que só vai rodar no IE8, essa foi a única forma que eu consegui fazer o plugin funcionar no IE8.
[quote=Rafael Guerreiro][quote=Lucas Cavalcanti]se vc coloca o display:none no css (e não no style) funciona sim…
[/quote]
Pode ser exatamente esse o problema… Mas isso seria um bug, não?
[/quote]
Talvez… mas vc não deveria estar usando style inline
criar um .hidden {display:none} e usar não custa nada 
ele implementa o show colocando um display:block no style… daí fica “display:none; display: block” no style, o browser
renderiza isso do jeito que ele achar melhor.
[quote=Rafael Guerreiro]
[quote=Lucas Cavalcanti]
o propósito do JQuery eh vc escrever a mesma coisa pra funcionar em todos os browsers… se vc está com uma versão razoavelmente atualizada, ele deveria normalizar tudo isso.[/quote]
Estranho, pois eu uso a versão atual do jQuery e do plugin validator… Atualmente estou desenvolvendo uma aplicação que só vai rodar no IE8, essa foi a única forma que eu consegui fazer o plugin funcionar no IE8.[/quote]
Estranho…
Em todo caso costumo colocar as validações inline nos próprios inputs:
<input type="text" id="idDoInput" name="obj.atributo" class="required" minlength="5" maxlength="13" />
A ideia do class hidden é muito boa e resolve esse problema.
Sim, inline funciona. Mas como fazer para internacionalizar usando o messages.properties nas mensagens?
vc pode mudar a msg de cada validação específica…
dá uma olhada nas i18n que já vem junto com o jquery validate, é daquele jeito que muda as msgs.
Então, mas aí voltaria ao problema da chamada pelo name ou pelo ID.
Eu faço isso:
$('#formulario').validate();
$('#idDoInput').rules('add',{
required:true,
messages:{
required:'<fmt:message key="campoObrigatorio" />'
}
});
não… pq vc colocaria essa msg pra todas as validações de “required”, não importando o campo.
se vc precisar fazer uma validação específica, vc pode fazer um msg de validação aqui
[quote=Rafael Guerreiro]Mas se você fizer um teste, isso ai não vai funcionar no IE8. Pois ele não consegue trabalhar muito bem quando o name tem caractere especial (o ponto, no caso).
Então, para funcionar, você deve fazer a chamada pelo ID (cuidado para não colocar caractere especial no ID).
…
[/quote]
No meu IE8 até agora tá funcionando …
IE: 8.0
Codificação: 256-bit
<td><input id="usuariosenha" name="usuario.senha"
type="password"></td>
repete_senha:{
equalTo: "#usuariosenha"
}
sonictk, eu estava me referindo à este trecho:
"usuario.senha": {
required: true
}
//...
Essa é, com certeza, a forma em que o código fica menor.