这是比较容易,如果你可以给第一个复选框和第二个复选框单独的类,即:
<tr>
<td><input class="checkbox-parent" type="checkbox"></td>
<td><input class="checkbox-child disable" disabled="" type="checkbox"></td>
</tr>
然后,我们可以将事件侦听简单地绑定到在这种情况下的第一个复选框,.checkbox-parent
。当它被选中时,我们通过遍历DOM来关闭它的关联子。这是通过找到最近的<tr>
元素,然后选择.checkbox-child
来完成的。要启用/禁用复选框,您可以简单地使用.prop('disabled', <boolean>)
。
$('.checkbox-parent').change(function() {
// Traverse the DOM to get associated child checkbox
var $child = $(this).closest('tr').find('.checkbox-child');
// Update child state based on checked status
// - set disabled to false when is checked
// - set disabled to true when is unchecked
$child.prop('disabled', !this.checked);
});
你应该不是使用.removeAttr()
甚至使用.attr()
操纵布尔属性,如checked
,selected
,multiple
,disabled
,等
如果你不能改变你的标记...
或者,如果您的marku p不能更改,您可以在表格行中选择第一个(使用.first()
或.eq(0)
)和第二个/最后一个复选框(第二个使用.eq(1)
,最后使用.last()
)。
请注意,这不是那里最好的解决方案,因为对标记的更改意味着您将不得不修改这些硬编码的魔术常量和逻辑。
// Bind change event to the FIRST checkbox
$('tr input[type="checkbox"]').first().change(function() {
// Get the SECOND checkbox
var $child = $(this).closest('tr').find('input[type="checkbox"]').eq(1);
// If you want to get the LAST checkbox, use:
// var $child = $(this).closest('tr').find('input[type="checkbox"]').last();
// Update child state based on checked status
// - set disabled to false when is checked
// - set disabled to true when is unchecked
$child.prop('disabled', !this.checked);
});
有一些问题与您的标记必须被解决,太:
- 你必须换你
<tr>
在<table>
元素,否则浏览器会简单地把所有的表格元素超出您的标记以试图使其语义正确
<br />
不是有效的直接子<table>
在这里看到更新后的代码:
$('.checkbox-parent').change(function() {
// Traverse the DOM to get associated child checkbox
var $child = $(this).closest('tr').find('.checkbox-child');
// Update child state based on checked status
$child.prop('disabled', !this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td><input class="checkbox-parent" type="checkbox"></td>
<td><input class="checkbox-child disable" disabled="" type="checkbox"></td>
</tr>
<tr>
<td><input class="checkbox-parent" type="checkbox"></td>
<td><input class="checkbox-child disable" disabled="" type="checkbox"></td>
</tr>
</table>