Validação do grupo de botões de opção usando o plugin de validação jQuery

128

Como executar a validação para um grupo de botões de opção (um botão de opção deve ser selecionado) usando o plug-in de validação jQuery?

user27052
fonte
Veja a resposta de c.reeves em forum.jquery.com/topic/…
Existe um novo validador jQuery que é muito poderoso e fácil de usar. Você pode conferir: code.google.com/p/bvalidator
Nenad
não quer incluir uma biblioteca inteira para algo tão simples como isso
Doug Molineux

Respostas:

113

Com as versões mais recentes do jquery (1.3+ eu acho), tudo o que você precisa fazer é definir um dos membros do conjunto de rádio a ser necessário e o jquery cuidará do resto:

<input type="radio" name="myoptions" value="blue" class="required"> Blue<br />
<input type="radio" name="myoptions" value="red"> Red<br />
<input type="radio" name="myoptions" value="green"> Green

O item acima exigiria pelo menos 1 das 3 opções de rádio com o nome de "minhas opções" para ser selecionada antes de continuar.

A sugestão de etiqueta de Mahes, aliás, funciona maravilhosamente!

Brandon Rome
fonte
Esta é agora a melhor resposta para mim com as atualizações do jQuery. +1.
Kieran Andrews
6
O único problema é que, quando nenhum deles está marcado, o jQuery validate destaca o primeiro botão de opção em vermelho, mas, na realidade, você provavelmente deseja destacar TODOS eles. Além disso, depois de verificar qualquer botão de opção, o vermelho deve desaparecer.
haacked
2
@Haacked Você poderia usar a função de retorno de chamada errorPlacement nas opções de validação para colocar a mensagem de erro em algum lugar significativo?
autonomatt
2
@Haacked: adicionar focusInvalid: falseàs validate()opções impedirá o destaque do primeiro botão de opção.
Jim Miller
2
Eu sempre faço dessa maneira e posiciono o rótulo de erro na função errorPlacement. Isto é o que faço para os botões de opção: if (element.is ("input: radio")) {error.insertAfter (element.parent ()); } else {error.insertAfter (elemento); }
Francisco Goldenstein 14/11
24

use a regra a seguir para validar a seleção do grupo de botões de opções

myRadioGroupName : {required :true}

myRadioGroupName é o valor que você atribuiu ao atributo name

Mahes
fonte
15
Observe que se você quiser controlar a posição do rótulo, poderá fornecer seu próprio rótulo de erro onde desejar com o texto que deseja: <label for = "myRadioGroupName" class = "error" style = "display: none; "> Por favor, escolha uma. </label>
Tom
@Tom é inútil escrever a labeltag para o erro; na verdade, o plug-in adiciona automaticamente essa tag.
Ahmehri 6/05
3
Há muito tempo, mas imagino que o que eu estava tentando fazer era colocar o <label> em outro lugar do DOM, em vez de onde ele foi criado automaticamente pelo plugin. Além disso, é bem possível que o comportamento do plugin mudou nos últimos 5 anos ...
Tom
Triste como exige o "nome" em vez do "tipo" aqui para erros personalizados.
justdan23
19

Você também pode usar isso:

<fieldset>
<input type="radio" name="myoptions[]" value="blue"> Blue<br />
<input type="radio" name="myoptions[]" value="red"> Red<br />
<input type="radio" name="myoptions[]" value="green"> Green<br />
<label for="myoptions[]" class="error" style="display:none;">Please choose one.</label>
</fieldset>

e simplesmente adicione esta regra

rules: {
 'myoptions[]':{ required:true }
}

Mencione como adicionar regras.

Haider Abbas
fonte
1
Mas isso traria erros na validação do HTML5, acredito que o atributo for precisa ser uma referência de ID (que não podemos definir três botões de opção para o mesmo ID).
armyofda12mnkeys
1
Há uma grande diferença entre o atributo name e o atributo id.
Norman H
2
Não se esqueça que um botão de opção deve retornar apenas um valor; portanto, name="myoptions[]"é um pouco confuso, pois sugere que vários valores podem ser retornados.
Dementic
Coloca a mensagem de erro em cima. <estilo>. grupo de rádio {posição: relativa; margem superior: 40 px; } # erro-de-opção {position: absolute; topo: -25px; } </style> <div class = "radio-group"> <input type = "radio" name = "myoptions" value = "blue" class = "required"> Azul <br /> <input type = "radio" name = "myoptions" value = "red"> Vermelho <br /> <input type = "radio" name = "myoptions" value = "green"> Verde </div> </div> <! - end radio- group ->
Sonobor
4

Conforme a resposta de Brandon. Mas se você estiver usando o ASP.NET MVC, que usa validação discreta, você pode adicionar o atributo data-val ao primeiro. Também gosto de ter rótulos para cada botão de opção para usabilidade.

<span class="field-validation-valid" data-valmsg-for="color" data-valmsg-replace="true"></span>
<p><input type="radio" name="color" id="red" value="R" data-val="true" data-val-required="Please choose one of these options:"/> <label for="red">Red</label></p>
<p><input type="radio" name="color" id="green" value="G"/> <label for="green">Green</label></p>
<p><input type="radio" name="color" id="blue" value="B"/> <label for="blue">Blue</label></p>
Matt Frear
fonte
3

Outra maneira de validar é assim.

var $radio = $('input:radio[name="nameRadioButton"]');
$radio.addClass("validate[required]");

Espero que meu exemplo o ajude

strudeltercero
fonte
2

Eu tive o mesmo problema. Acabou escrevendo um destaque personalizado e uma função não realçada para o validador. Adicionar isso às opções de validação deve adicionar a classe de erro ao elemento e seu respectivo rótulo:

        'highlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").addClass(errorClass);
                    $(this).addClass(errorClass);
                });
            } else {
                $(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
                $(element).addClass(errorClass);
            }
        },
        'unhighlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").removeClass(errorClass);
                    $(this).removeClass(errorClass);
                });
            }else {
                $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
                $(element).removeClass(errorClass);
            }
        },
Cin
fonte
2

código para o botão de opção -

<div>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Female",false) Female</span>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Male",false) Male</span>                                                        
<div class='GenderValidation' style="color:#ee8929;"></div>    
</div> 

<input class="btn btn-primary" type="submit" value="Create" id="create"/>

código jQuery

<script>
    $(document).ready(function () {
        $('#create').click(function(){

            var gender=$('#Gender').val();
            if ($("#Gender:checked").length == 0){
                $('.GenderValidation').text("Gender is required.");
                return false;
            }
        });
    });
</script>
Sayli Vaidya
fonte
0

Coloca a mensagem de erro em cima.

   <style> 

 .radio-group{ 
      position:relative; margin-top:40px; 
 } 

 #myoptions-error{ 
     position:absolute; 
     top: -25px; 
  } 

 </style> 

 <div class="radio-group"> 
 <input type="radio" name="myoptions" value="blue" class="required"> Blue<br /> 
 <input type="radio" name="myoptions" value="red"> Red<br /> 
 <input type="radio" name="myoptions" value="green"> Green </div>
 </div><!-- end radio-group -->
Sonobor
fonte