Одна из проблем состояла в том, что у вас был атрибут checked
на промежутке, окружающий верхний флажок и метку, и вы привязывали обработчик событий к промежутку, поэтому checked
всегда останется checked
на промежутке.
Вместо этого я переместил обработчики событий в флажок и немного исправил код. Хотя я не верю, что существует проблема в создании ваших собственных атрибутов для элементов HTML, то есть проверенного атрибута в элементе span (я думаю, что строгая проверка XHTML с ними не удалась), я не знаю, считается ли это хорошей практикой.
Я вижу, что вы используете ASP.NET, основываясь на искажении идентификатора - вы можете использовать сторону сервера <%= myControl.ClientID %>
, чтобы получить искаженный идентификатор для рендеринга в HTML, отправленном клиенту.
Рабочий пример здесь
$(function() {
$('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi').unbind('click');
$('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi').click( function() {
var cbs = $('table input:checkbox');
if($(this).is(':checked')){
cbs.each(function() { $(this).attr('checked', true); });
}
else{
cbs.each(function() { $(this).attr('checked', false); });
}
});
});
EDIT:
В ответ на ваш комментарий у вас есть несколько вариантов разрешения клиентуры. Если вы напишите свой jQuery на странице aspx, то вы можете просто использовать
$('#<%= cbOzelKurumHastasi.ClientID %>')
вместо
$('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi')
Если у вас есть jQuery во внешнем файле скрипта, вы можете поместить его на страницу aspx
<script type="text/javascript">
var cbOzelKurumHastasi = '#<%= cbOzelKurumHastasi.ClientID %>';
</script>
и затем используйте переменную в вашем внешнем файле сценария
$(function() {
$(cbOzelKurumHastasi).unbind('click');
$(cbOzelKurumHastasi).click( function() { ...
Для других вариантов взгляните на этот вопрос и ответ - Как остановить ASP.NET от изменения идентификаторов для использования jQuery