问题之一是您在包围顶部复选框和标签的 span 上设置了 checked 属性并绑定了事件处理程序到该 span,因此 checked 属性将始终保留在该 span 上。
我已将事件处理程序移到复选框上,并对代码进行了一些整理。虽然我认为在 HTML 元素上构建自己的属性不是问题(例如,在 span 元素上设置 checked 属性,我认为在 XHTML strict 验证时会失败),但我不知道这样做是否被认为是良好的实践。
根据 ID 混淆,我可以看出您正在使用 ASP.NET - 您可以使用服务器端的
<%= myControl.ClientID %>
获取混淆的 ID 以呈现在发送到客户端的 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); });
}
});
});
编辑:
针对您的评论,您有几个选项来解决clientid的问题。如果您将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更改ID以便使用jQuery