[OFF] validar radiobuttons com jquery

1,038 views
Skip to first unread message

Lucien Campos

unread,
Jun 18, 2010, 11:31:21 AM6/18/10
to zfbr...@googlegroups.com
Bom dia,

Mil perdões pelo assunto um pouco fora do escopo da lista, mas estou quebrando a cabeça com esse problema desde o início do expediente.

Tenho um formulário com vários radio buttons e a regra é: o formulário só pode ser submetido se todos estiverem marcados.

Fiz assim:

var ok = false;
    $('#form2 input:radio').each(function(){
        if ($(this).is(':checked')){
            ok = true;
        }
    });
   
    if (ok == true){
        return true;       
    } else {
        jAlert('Por favor, preencha todas as notas.', 'Erro');
        return false;
    }

Mas não tá funcionando muito bem. Se todos os radio estiverem vazios, a função acusa o erro, mas se eu marcar 1 só, o formulário é enviado, ignorando os que foram deixados em branco.

Alguém poderia me dar uma dica?

Valeu.

Juarez Gonçalves Nery Junior

unread,
Jun 18, 2010, 11:35:33 AM6/18/10
to zfbr...@googlegroups.com
Faça a validação dentro do each, se não estiver "checado" vc mostra o alert.

simples.

[s]

2010/6/18 Lucien Campos <lucien...@gmail.com>

--
Essa mensagem faz parte do grupo "zfbrasil" no Google Groups.
Para escrever neste grupo, envie um email para zfbr...@googlegroups.com
Para se desligar do grupo, envie um email para zfbrasil-u...@googlegroups.com
Mais informações, visite o grupo em http://groups.google.com/group/zfbrasil?hl=pt-BR



--
Juarez Junior - juarez...@gmail.com
http://twitter.com/juareznjunior
http://juareznjunior.wordpress.com/
msn:jws_j...@yahoo.com.br
gtalk:juarez...@gmail.com

Paulo Vitor Bettini de Albuqerque Lima

unread,
Jun 18, 2010, 12:04:26 PM6/18/10
to zfbr...@googlegroups.com
Esse código que você colocou diz que se pelo menos um estiver marcado o formulário estará OK.
Você tem que verificar isso Não entendi bem sua regra, btw.

Atenciosamente,
Paulo Vitor Bettini de Albuquerque Lima

----
I enjoy the massacre of ads. This sentence will slaughter ads without a messy bloodbath.
Eu não gosto de anúncios do google nos meus emails...


2010/6/18 Juarez Gonçalves Nery Junior <juarez...@gmail.com>

Diego

unread,
Jun 18, 2010, 12:30:52 PM6/18/10
to zfbr...@googlegroups.com
E como você marca todos os radio buttons sendo que essa não é a função do radio button?
Diego Noguês
di...@projecttus.com
www.projecttus.com
(41) 3095 5067


Leandro Rodrigues Chaves

unread,
Jun 18, 2010, 12:45:48 PM6/18/10
to zfbr...@googlegroups.com
Troca:


var ok = false;
    $('#form2 input:radio').each(function(){
        if ($(this).is(':checked')){
            ok = true;
        }
    });


Por:


    $('#form2 input:radio').each(function(){
        if ($(this).is(':checked') == false){

              jAlert('Por favor, preencha todas as notas.', 'Erro');
              return false;
        }
    });


--------------------------------------
Leandro Rodrigues Chaves
Arquiteto de Software PHP
--------------------------------------

Lucien Campos

unread,
Jun 18, 2010, 1:11:53 PM6/18/10
to zfbr...@googlegroups.com
@Diego

Acho que me expressei mal. Não quero "marcar todos os radio buttons".
É que o formulário possui vários campos e a cada campo está associado um radio button, com valores de 1 a 5.
Foi isso que eu quis dizer com "tenho um formulário com vários radio buttons".

Testei a sugestão do Leandro e do Juarez e ficou assim


    $('#form2 input:radio').each(function(){
        if ($(this).is(':checked') == false){
            jAlert('Por favor, preencha todas as notas.', 'Erro');
            return false;
        }
    });
    return true;

Não funcionou. Em qualquer caso, ele exibe a mensagem de erro mas mesmo assim submete o formulário.
Não estou conseguindo arrumar essa lógica :(

2010/6/18 Leandro Rodrigues Chaves <leandr...@gmail.com>

Lucien Campos

unread,
Jun 18, 2010, 1:20:10 PM6/18/10
to zfbr...@googlegroups.com
Só pra deixar claro, o formulário é assim:

Campo1 | O opt1 O opt2 O opt3 O opt4 O opt5
---------------------------------------------
Campo2 | O opt1 O opt2 O opt3 O opt4 O opt5
---------------------------------------------
Campo3 | O opt1 O opt2 O opt3 O opt4 O opt5
---------------------------------------------
Campo4 | O opt1 O opt2 O opt3 O opt4 O opt5
---------------------------------------------
Campo5 | O opt1 O opt2 O opt3 O opt4 O opt5

E a regra é que todos os campos são obrigatórios, ou seja, o meu código deveria verificar se em cada linha um radio button está marcado.

2010/6/18 Lucien Campos <lucien...@gmail.com>

Glauber Cini

unread,
Jun 18, 2010, 1:20:42 PM6/18/10
to zfbr...@googlegroups.com
Lucien,

se voce tem vários grupos de radio buttons logo terá que verificar cada grupo, estou certo?
algo assim talvez

var ok = false;

$('[name*=grupo1]').each(function(){

       if ($(this).is(':checked')){
            ok = true;
       } 
});

if(!ok){
    alert('erro');
    return false;
}

ok = false;

$('[name*=grupo2]').each(function(){

       if ($(this).is(':checked')){
            ok = true;
       } 
});

if(!ok){
    alert('erro');
    return false;
}
return true;

Att,

Glauber Cini
--
Glauber Cini

Lucien Campos

unread,
Jun 18, 2010, 1:24:25 PM6/18/10
to zfbr...@googlegroups.com
Não havia pensando nisso... são 20 grupos de radio buttons :(
Vou tentar fazer isso, valeu :)

2010/6/18 Glauber Cini <glaub...@gmail.com>

Ciro

unread,
Jun 18, 2010, 1:24:16 PM6/18/10
to zfbr...@googlegroups.com
Cara, tem um plugin do jQuery, o validation http://docs.jquery.com/Plugins/Validation#API_Documentation

que faz isso fácil fácil... Recomendo dar uma olhada...
Atenciosamente,

Ciro Junior
(61)8103-8856

Glauber Cini

unread,
Jun 18, 2010, 1:35:30 PM6/18/10
to zfbr...@googlegroups.com
utiliza uma lista talvez...

var rbs = ['grupo1', 'grupo2', ..., 'grupon'];
for...
ok = false;
$('[name*='+rbs[i]+']').each(function(){

       if ($(this).is(':checked')){
            ok = true;
       } 
});

if(!ok){
    alert('erro');
    return false;
}

endfor..

return true;

hehehe
faz o javascript trabalha pra ti...

valeuuu

Att,

Glauber Cini

Marcos Fábio

unread,
Jun 18, 2010, 1:42:10 PM6/18/10
to zfbr...@googlegroups.com
Pow.. exatamente.. se vc for fazer isso pra 20 campos ... manutenção vai ser chata...

o código que eu faria:


$('form').submit(function(){

                var grupos, error = new Array();
                var msg;

                //Adicona todos os grupos existentes
                grupos.push('grupo1');
                grupos.push('grupo2');

                for( var key in grupos )
                {
                    var qtdChecked = $('input[type="radio"][name="'+ grupos[key] +'"]:checked').length;

                    if( qtdChecked == 0 ) error.push(grupos[key]);
                }

                if( error.length > 0 )
                {
                    msg = 'Não foi selecionada nenhuma opção para o(s) campo(s):\n\n';
                   
                    for (var key in error)
                    {
                        msg += error[key]+'\n';
                    }
                }
                else
                {
                    msg = 'ok';
                }

                return error.length;

Lucien Campos

unread,
Jun 18, 2010, 1:45:36 PM6/18/10
to zfbr...@googlegroups.com
Vou testar o plugin de validação do jquery e se não funcionar vou escrever a função na mão mesmo, rs

Valeu.

2010/6/18 Marcos Fábio <marc...@gmail.com>

Leandro Rodrigues Chaves

unread,
Jun 18, 2010, 2:05:34 PM6/18/10
to zfbr...@googlegroups.com
for(i=1; i<21; i++){
    if( $('input[name=grupo'+i+']:checked') == null ){

           jAlert('Por favor, preencha todas as notas.', 'Erro');
           return false;
    }
}


Lucien Campos

unread,
Jun 18, 2010, 2:25:00 PM6/18/10
to zfbr...@googlegroups.com
Consegui, ficou assim:

    for(i=1; i<11; i++){
        if($('input[name=sat'+i+']').is(':checked') == false){

            jAlert('Por favor, preencha todas as notas.', 'Erro');
            return false;
        }
    }
    for(j=1; j<11; j++){
        if($('input[name=imp'+j+']').is(':checked') == false){

            jAlert('Por favor, preencha todas as notas.', 'Erro');
            return false;
        }
    }
    return true;

Obrigado a todos pela ajuda :)

2010/6/18 Leandro Rodrigues Chaves <leandr...@gmail.com>
for(i=1; i<21; i++){
--

Leandro Rodrigues Chaves

unread,
Jun 18, 2010, 2:51:16 PM6/18/10
to zfbr...@googlegroups.com
Tá! Mas então vc não deixou claro, pois falou algo diferente qdo mostrou o form. Só por curiosidade, pq 11? E oq seria "sat" e "imp"?

Lucien Campos

unread,
Jun 18, 2010, 2:59:58 PM6/18/10
to zfbr...@googlegroups.com
Os laços for vão de 1 a 11 porque são 10 itens e 2 grupos de notas: SATisfação e IMPortância, totalizando 20 grupos de radio buttons.
Por exemplo, diante do item A, o usuário pode dar nota 4 para seu nível de satisfação com o item e nota 3 para o grau de importância que atribui para o mesmo.

Enfim, essas são particularidades do projeto e achei que ficaria muito confuso explicar, então coloquei minha dúvida de maneira genérica: como eu poderia fazer para validar vários grupos de radio buttons ao mesmo tempo.

Obrigado pela ajuda.

2010/6/18 Leandro Rodrigues Chaves <leandr...@gmail.com>
Tá! Mas então vc não deixou claro, pois falou algo diferente qdo mostrou o form. Só por curiosidade, pq 11? E oq seria "sat" e "imp"?
--

Paulo Vitor Bettini de Albuqerque Lima

unread,
Jun 18, 2010, 3:05:49 PM6/18/10
to zfbr...@googlegroups.com
Eu faria isso usando select. Acho que fica mais fácil pro usuário.



Atenciosamente,
Paulo Vitor Bettini de Albuquerque Lima

----
I enjoy the massacre of ads. This sentence will slaughter ads without a messy bloodbath.
Eu não gosto de anúncios do google nos meus emails...


2010/6/18 Lucien Campos <lucien...@gmail.com>

Lucien Campos

unread,
Jun 18, 2010, 3:22:02 PM6/18/10
to zfbr...@googlegroups.com
Usar radio buttons foi exigência do cliente. Segundo ele, assim fica mais parecido com o antigo formulário em papel...

2010/6/18 Paulo Vitor Bettini de Albuqerque Lima <paulov...@gmail.com>

Rafael Armenio

unread,
Jun 18, 2010, 3:23:59 PM6/18/10
to zfbr...@googlegroups.com
olha, acho que nesse caso vai precisar criar a validação manualmente mesmo. sendo client e server

2010/6/18 Lucien Campos <lucien...@gmail.com>



--
att. Rafael Armênio

Desenvolvedor Web / Analista de Sistemas

twitter: http://twitter.com/rafael_armenio
email: rafael....@gmail.com
msn: rafael_...@msn.com
talk: rafael....@gmail.com
skype: rafael.armenio
cel: +55 (41) 8492-8195
Reply all
Reply to author
Forward
0 new messages