问题之一是您checked
在顶部复选框和标签周围的跨度上具有属性,并且将事件处理程序绑定到跨度,因此checked
将始终保留checked
在跨度上。
我已将事件处理程序移至复选框,并稍微整理了代码。虽然我不认为在 HTML 元素上构建自己的属性(即在 span 元素上检查属性)存在问题(我认为 XHTML 严格验证对它们失败),但我不认为这样做是否是好的做法。
我可以看到您正在使用 ASP.NET,基于 ID 修改 - 您可以使用服务器端<%= 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。如果您在 aspx 页面中编写 jQuery,那么您可以简单地使用
$('#<%= 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