代码如下,复选框始终为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>
答案 0 :(得分:37)
其中一个问题是,您在顶部复选框和标签周围的范围内有checked
属性,并且将事件处理程序绑定到范围,因此checked
将始终保持checked
在跨度上。
我已将事件处理程序移动到复选框,并稍微整理了代码。虽然我不认为在HTML元素上构建自己的属性存在问题,即span元素上的checked属性(我认为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
答案 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文档:
答案 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)
===是JS的类型安全比较器
请参阅: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators
答案 7 :(得分:0)
这也有效:
(($('input[name="myCheckBox"]:checked').val())=='on')
它将返回true或false
其中复选框定义为:
<input type="checkbox" name="myCheckBox">