2013-03-18 16 views
11

Zrobiłem skrypt, aby kontrolować pola podrzędne master & (automatyczne sprawdzanie i odznaczanie).Zaznacz i odznacz pole wyboru Dynamicznie z jQuery: błąd?

Oto mój JS:

$(document).ready(function() { 

    $('#myCheck').click(function() { 
     $('.myCheck').attr('checked', false); 
    }); 
    $('.myCheck').click(function() { 
     if ($('.myCheck').is(':checked')) { 
      $('#myCheck').attr('checked', false); 
     } else { 
      $('#myCheck').attr('checked', true); // IT DOESN'T WORK, WHY ? 
      alert("Checkbox Master must be checked, but it's not!"); 
     } 
    }); 

}); 

I tu jest mój HTML:

<input type="checkbox" id="myCheck" checked="checked" />&nbsp;&nbsp;Checkbox Master<br /> 
<input type="checkbox" class="myCheck" value="1" />&nbsp;&nbsp;Checkbox Slave 1<br /> 
<input type="checkbox" class="myCheck" value="1" />&nbsp;&nbsp;Checkbox Slave 2 

Spójrz na moim prostym JsFiddle zrozumieć problem.

EDIT 1: Tak jak powiedział Inser, problem występuje z jQuery w wersjach 1.9.2 i nowszych. Nigdy więcej problemu z jQuery 1.8.3. Dziwne ...

EDIT 2: Inser znaleźć rozwiązanie, należy .prop ('sprawdzone', true) zamiast .attr ('sprawdzone', true). Spójrz na komentarzach poniżej ...

+2

Jakie jest pytanie? –

+0

'Patrząc na swoje proste JsFiddle, aby zrozumieć problem', ale myaaan !! nie wiem, co próbujesz zrobić ... więc co chcesz acctully – bipen

+0

Ok, przepraszam, chłopaki Myślałem, że mój kod był czysty ... Po kliknięciu na Checkbox Master, wszystkie pola wyboru Checkboxes Slave muszą być odznaczone: to działa w porządku. Z drugiej strony, po usunięciu zaznaczenia pola wyboru "Slave Checkbox" i nie ma innego zaznaczonego pola "Checkbox Slave", Checkbox Master musi zostać automatycznie sprawdzony. Przepraszamy za to, mam nadzieję, że zrozumiesz teraz mój problem ... –

Odpowiedz

35

Zastosowanie prop metoda dla nowych wersji jQuery:

$('#myCheck').prop('checked', true); 
$('#myCheck').prop('checked', false); 

http://jsfiddle.net/uQfMs/37/

+0

Wielkie dzięki Inser, to rozwiązanie, uratowałeś mój dzień (i noc)! Dobra robota! ;-) –

+0

Naprawdę fajnie, szalałem z ostatnim jquery 1.11, dziękuję! – xtrm

+0

to wydaje się nie działać w jquery wersji 2 + ... czy to tylko ja? –

0

Może chcesz po prostu zaznacz pole wyboru głównego:

$('#myCheck').click(function() { 
     $('.myCheck').attr('checked', false); 
     $(this).attr('checked', true); 
}); 

zobaczyć ten fiddle.

3

Można spróbować.

$('#myCheck').click(function() { 
    var checkBoxes = $(this).siblings('input[type=checkbox]'); 
    checkBoxes.prop('checked', $(this).is(':checked') ? true : false); 
}); 
+0

to jest piękne – baik

+0

Dzięki! Cieszę się ze to lubisz. –

+0

Operator trójskładnikowy jest nadmiarowy. '$ (this) .is (": checked ")? true: false' zawsze zwraca tę samą wartość boolowską, co '$ (this).is (": checked") '. –

0

zrobiłem pewne doświadczenia, rzeczywiście $(':checkbox').attr('checked',false); Mimo, to może ustawić „zaznaczone” atrybut, ale to nie będzie continuesly pokazuje w wizualnym. i $(':checkbox').prop('checked', true); ten działa idealnie! mam nadzieję, że to pomoże.

0

Pisałem ci wtyczki dla tego:

$.fn.dependantCheckbox = function() { 
    var $targ = $(this); 
    function syncSelection(group, action) { 
    $targ.each(function() { 
     if ($(this).data('checkbox-group') === group) { 
     $(this).prop('checked', action); 
     } 
    }); 
    }; 
    $('input[type="checkbox"][data-checkbox-group]').on('change', function() { 
    var groupSelection = $(this).data('checkbox-group'); 
    var isChecked = $(this).prop('checked'); 
    syncSelection(groupSelection, isChecked); 
    }); 
} 
$('input[type="checkbox"][data-checkbox-group]').dependantCheckbox(); 


<input data-checkbox-group="1" type="checkbox" id="test" /> 
<label for="test">test</label> 
<input data-checkbox-group="1" type="checkbox" id="test2" /> 
<label for="test2">test2</label> 
<input data-checkbox-group="2" type="checkbox" id="test3" /> 
<label for="test3">test3</label> 
<input data-checkbox-group="2" type="checkbox" id="test4" /> 
<label for="test4">test4</label> 

http://codepen.io/nicholasabrams/pen/mJqyqG

+0

naprawdę fajna wtyczka. Chciałem tylko wiedzieć, czy pole wejściowe jest częścią więcej niż jednej grupy, a następnie w jaki sposób można obsłużyć tę wtyczkę? –

Powiązane problemy