20

代码如下,复选框始终为 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>
4

8 回答 8

39

问题之一是您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

于 2009-05-14T20:41:00.757 回答
7

我通常使用 jQuery 的 .is() 功能来检查这个

$('.cbOzelHastaAdi').click( function() {
  if($(this).is(':checked')){
    ...
  }else{
    ...
  }
})
于 2009-05-14T20:38:05.460 回答
3

可能是因为您将检查属性的值与字符串而不是布尔值进行比较,并使用 === 运算符来比较值和类型?

于 2009-05-14T20:33:25.223 回答
1

我遇到了同样的问题;检查是否选中了复选框(以任何不同的方式)总是返回 false。

我的解决方案(问题过程)在使用的 JQuery 选择器中。

uzay95 使用类选择器“.”来选择其复选框。

$('.cbOzelHastaAdi')**

它返回一个结果集。因此,检查它是否被选中是无效的,因为它们可能是多个复选框......我知道他在他的代码中使用了this关键字,但对我来说这也没有解决问题。

只要您按 ID 选择复选框,您就可以评估其“已选中”属性。

于 2011-08-23T14:05:57.443 回答
0

Russ Cam 的答案有效,但为什么不 jQueryify 更多呢?

$(function() {     
    $('.cbOzelHastaAdi').live('click', function() {
        $(this).parents('div').find('table input:checkbox').attr('checked', $(this).attr('checked'));
    });
});

这假定类cbOzelHastaAdi现在附加到复选框而不是 span 元素。这应该允许您避免所有混乱的 ASP 重命名,并允许每页有多个相似的表,而无需多个单击事件函数。

于 2009-05-14T21:01:56.417 回答
0

=== 是 JS 的类型安全比较器

请参阅: https ://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators

于 2010-01-26T14:49:26.957 回答
0

我发现以下可能是确定 jQuery 中已检查状态的最佳方法:

var cbs = $(parentDiv).find('table input:checkbox:checked');

这将为您提供已检查的每个输入的数组。

这主要来自 jQuery 文档:

选择器/选中

于 2009-05-14T20:34:29.603 回答
0

这也有效:

(($('input[name="myCheckBox"]:checked').val())=='on')

它将返回 true 或 false

其中复选框定义为:

<input type="checkbox" name="myCheckBox">
于 2013-08-26T11:02:01.880 回答