Pergunta

1) when i clicked to any checkbox, 
  a) i want to select radio in the same div 
  b) unselect the other radios with their checkboxes. 

2) When i click to radio, 
  a) select all checkboxes in the same div.
  b) uncheck the other radios

3) is there any way to get parents without its first parent div?

Como posso fazer isso?

<div class="topDiv">
    <div class="repeaterDiv"><input type="radio" id="rpt_01_rb" />
        <input type="checkbox" id="rpt_01_cb1" />
        <input type="checkbox" id="rpt_01_cb2" />
        <input type="checkbox" id="rpt_01_cb3" />
    </div>
    <div class="repeaterDiv"><input type="radio" id="rpt_02_rb" />
        <input type="checkbox" id="rpt_02_cb1" />
        <input type="checkbox" id="rpt_02_cb2" />
        <input type="checkbox" id="rpt_02_cb3" />
    </div>
    <div class="repeaterDiv"><input type="radio" id="rpt_03_rb" />
        <input type="checkbox" id="rpt_03_cb1" />
        <input type="checkbox" id="rpt_04_cb2" />
        <input type="checkbox" id="rpt_05_cb3" />
    </div>
</div>
Foi útil?

Solução

Certifique-se de que todos os botões de rádio compartilham o mesmo nome:

<input type="radio" id="rpt_01_rb" name="rpt_rb" />
<input type="radio" id="rpt_02_rb" name="rpt_rb" />
// etc...

Em seguida, tente o seguinte código (eu não testei):

$('div.repeaterDiv>input[type=checkbox]').each(function(idx, item)
{
    $(item).click(function()
    {
        $(item).siblings('input[type=radio]:first').attr('checked', 'checked');
    });
});

$('div.repeaterDiv>input[type=radio]').each(function(idx, item)
{
    $(item).click(function()
    {
        $(item).siblings('input[type=checkbox]').attr('checked', 'checked');
    });
});

O que acontece aqui?

A primeira parte percorre as caixas de seleção na div e anexa um manipulador de eventos para cada um deles. Este cheques manipulador de eventos do botão de rádio na mesma div.

Da mesma forma, a segunda parte percorre os botões de opção no div atribui um manipulador de eventos que verifica todas as caixas de seleção na mesma div.

Se você não se esqueça de certificar-se de que os botões de rádio têm o mesmo nome, desmarcando os outros botões de rádio deve ser feito automaticamente pelo navegador.

Outras dicas

Isso deve funcionar e ser muito mais eficiente do que DrJokepu de:

$(function() {
    $('.repeaterDiv>:radio').bind('click',function() {
        $('.repeaterDiv>:checkbox').removeAttr('checked');
        $(this).siblings(':checkbox').attr('checked','checked');
    });

    $('.repeaterDiv>:checkbox').bind('click',function() {
        $('.repeaterDiv>:checkbox').removeAttr('checked');
        $(this).attr('checked','checked').siblings(':radio').attr('checked','checked');
    });
});

Como uma nota lateral, você deve certificar-se os botões de rádio, todos têm o mesmo nome, a fim de ser stardards compatível ...

Se houver alguma estranha razão por que você não pode fazer isso, você pode mudar a última linha do bloco de ligação caixa de seleção (como feio como pode ser) a:

$(this)
    .attr('checked','checked')
    .parent().siblings('.repeaterDiv').find(':radio')
    .removeAttr('checked');

    // I prefer to break the chain here but...
    // you could continue the above chain by doing: 
    // '.end().end().end().siblings(':radio').attr('checked','checked');'

$(this).siblings(':radio').attr('checked','checked');
// when a radio is clicked, unselect any checkboxes in other groups
$('div.topDiv input[type=radio]').click(function() {
    $('div.topDiv div.repeaterDiv').not($(this).parent(".repeaterDiv")).children("input[type=checkbox]").attr('checked', '');
});

// when a checkbox is checked, and it's radio isn't, "click" its radio
// which in turn unchecks other boxes using event defined above
$('div.topDiv input[type=checkbox]').click(function() {
    if (!$(this).siblings('input[type=radio]').attr('checked')) {
        $(this).siblings('input[type=radio]').trigger('click');
    }
});

Isto irá desmarcar as caixas de seleção em quaisquer outros grupos de verificação de opção de rádio. Mesma antecedência que os outros Re: as opções de rádio que necessitam de um nome comum

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top