代码在下面,复选框始终为FALSE。但在页面上是不同的。它没有被检查或取消选中。
<script type="text/javascript"> $('.cbOzelHastaAdi').unbind('click'); $('.cbOzelHastaAdi').click( function() { var parentDiv = $(this).parent().get(0); var cbs = $(parentDiv).find('table input:checkBox'); if($(this).attr("checked") === "true") { cbs.each(function() { $(this).attr('checked',false); }); } else{ cbs.each(function() { $(this).attr('checked',true); }); } }) </script>
解决方法
其中一个问题是您在顶部复选框和标签上的跨度上具有检查属性,并将事件处理程序绑定到跨度,因此检查将始终在跨度上保持检查。
我已经将事件处理程序移动到复选框,而是将代码整理好了。虽然我不相信在HTML元素上构建您自己的属性,即跨元素上的已检查属性(我认为XHTML严格验证失败了),但我不知道这样做是否被认为是最佳做法。
我可以看到你正在使用ASP.NET,基于ID的错误 – 你可以使用服务器端<%= myControl.ClientID%>以获取被发送到客户端的HTML格式的渲染ID。
$(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); }); } }); });
编辑:
为了回应你的评论,你有几个选择来解决客户端。如果您在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() { ...
其他选项请看这个问题和答案 – How to stop ASP.NET from changing ids in order to use jQuery