复选框和JQUERY:“已选中”始终为FALSE

时间:2009-05-14 20:19:58

标签: jquery checkbox

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

8 个答案:

答案 0 :(得分:37)

其中一个问题是,您在顶部复选框和标签周围的范围内有checked属性,并且将事件处理程序绑定到范围,因此checked将始终保持checked在跨度上。

我已将事件处理程序移动到复选框,并稍微整理了代码。虽然我不认为在HTML元素上构建自己的属性存在问题,即span元素上的checked属性(我认为XHTML严格验证失败了),但我不认为这样做是好的做法。

我可以看到你正在使用ASP.NET,基于ID修改 - 你可以使用服务器端<%= myControl.ClientID %>来获取在发送给客户端的HTML中呈现的错位id。

Working Example here

   $(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

答案 1 :(得分:7)

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

$('.cbOzelHastaAdi').click( function() {
  if($(this).is(':checked')){
    ...
  }else{
    ...
  }
})

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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

uzay95使用类选择器“。”来选择它的复选框。

$( 'cbOzelHastaAdi')**

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

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

答案 4 :(得分:0)

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

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

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

这主要来自jQuery文档:

  

Selectors/Checked

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

答案 7 :(得分:0)

这也有效:

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

它将返回true或false

其中复选框定义为:

<input type="checkbox" name="myCheckBox">