此代码:
if ($('[id*="cat' + cat_id + '_sk"]').is(':checked') && $('[id*="cat' + cat_id + '_sk"]').not(':disabled')) {
$('[id*="cat' + cat_id + '_sk"]').prop('checked', false);
} else if ($('[id*="cat' + cat_id + '_sk"]').not(':checked') && $('[id*="cat' + cat_id + '_sk"]').not(':disabled')) {
$('[id*="cat' + cat_id + '_sk"]').prop('checked', 'checked');
}
似乎忽略了if子句的第二部分;如果选中了复选框,我希望忽略它。
我已尝试使用前一个is(':disabled)
执行!
,也尝试使用boolean
!(element).prop('disabled');
- 所有效果都相同。
上面的代码肯定被调用,因为所有复选框都会切换检查状态 - 问题围绕无法忽略禁用的复选框。
我的逻辑错了吗?
答案 0 :(得分:2)
这应该会更好一点:
$('[id*="cat' + cat_id + '_sk"]').each(function(elm) {
var $elm = $(elm);
if($elm.is(':checked') && !$elm.is(':disabled')) {
$elm.removeProp('checked');
}
else if(!$elm.is(':checked') && !$elm.is(':disabled')) {
$elm.prop('checked', 'checked');
}
});
正如A. Wolff上面所说,.is(':checked')
将返回true,即使只检查了匹配集中的一个复选框。您需要使用each
循环遍历元素。
答案 1 :(得分:1)
jQuery中的.not()只是一个减少当前元素集的过滤器。如果禁用它,它不会返回布尔值。
答案 2 :(得分:0)
您应该使用!obj.is(':checked'))
,例如:
if ($('[id*="cat' + cat_id + '_sk"]').is(':checked') && $('[id*="cat' + cat_id + '_sk"]').not(':disabled')) {
$('[id*="cat' + cat_id + '_sk"]').prop('checked', false);
} else if (!$('[id*="cat' + cat_id + '_sk"]').is(':checked') && $('[id*="cat' + cat_id + '_sk"]').not(':disabled')) {
$('[id*="cat' + cat_id + '_sk"]').prop('checked', 'checked');
}
另一个例子,如果您想在选中后选中未选中的复选框,只需将逻辑分开,例如:
if ($('[id*="cat' + cat_id + '_sk"]').is(':checked')) {
if ($('[id*="cat' + cat_id + '_sk"]').not(':disabled')) {
$('[id*="cat' + cat_id + '_sk"]').prop('checked', false);
}
} else {
if ($('[id*="cat' + cat_id + '_sk"]').not(':disabled')) {
$('[id*="cat' + cat_id + '_sk"]').prop('checked', 'checked');
}
}
答案 3 :(得分:0)
if($(this).is(':checked') && $(this).attr('disabled') != 'disabled')
上面的代码行是指如果选中此复选框但未禁用
的逻辑$(document).ready(function() {
$('.check').each(function() {
console.log($(this).attr('disabled'));
if($(this).is(':checked') && $(this).attr('disabled') != 'disabled') {
$(this).after('Checked and not disabled');
}
});
});
<input type="checkbox" class="check" checked disabled/><br/>
<input type="checkbox" class="check" /><br/>
<input type="checkbox" class="check" checked disabled/><br/>
<input type="checkbox" class="check" checked /><br/>
<input type="checkbox" class="check" /><br/>
<input type="checkbox" class="check" disabled /><br/>
<input type="checkbox" class="check" /><br/>
希望这会有所帮助