在JQuery中,为什么可以't调用removeAttr(“checked”)后,我选中一个复选框
In JQuery, why can't I check a checkbox after removeAttr("checked") is called?
如果填充了某个输入字段,我想选中一个复选框。
下面的解决方案最初有效。输入输入后,复选框被正确选中。删除输入后,复选框将被取消选中。但在再次输入输入后,复选框不会被选中。
<html>
<head>
<script src="jquery-1.11.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$(":input").blur(function() {
var val = $(this).val();
var myclass = $(this).attr("class");
if (val != null && val.length > 0) {
$(":checkbox." + myclass).attr("checked", "checked");
} else {
$(":checkbox." + myclass).removeAttr("checked");
}
});
});
</script>
</head>
<body>
<form action="#" method="POST">
Name is selected? <input id="isNameSelected" type="checkbox" name="isName" class="name_input"></input><br/>
Name: <input class="name_input" id="name" type="text" name="Name"></input>
</form>
</body>
</html>
通过.attr()
对属性进行操作会让您感到困惑;我还没有彻底调查过,但我怀疑这与jQuery处理"checked"等属性有关。
您可以将整个if
语句替换为:
$(":checkbox." + myclass).prop("checked", !!val);
这将根据文本字段是否为非空来选中或取消选中复选框。
请注意,因为您触发了任何:input
元素的处理程序,所以当您从复选框中获得"blur"事件时,它也会触发。
此外,在我看来,依赖只有一个字符串的"class"属性是一种脆弱的编码实践。如果你需要对这些字段进行分组,你可以用一个容器元素来完成,你可以从中使用.closest()
和.find()
来定位伴随字段,也可以用data-
属性来表示你当前使用的"类"。
这也会起作用(并减少2行代码):
$(document).ready(function() {
$("#name").blur(function() {
$('#isNameSelected').prop('checked', $(this).val());
});
});
相关文章:
- 选中复选框时,DOM不显示element.input.checked和ng
- 复选框的checked属性的修改不会;工作不正常
- 如何通过javarscript或jquery在数组中添加属性复选框(checked=true)
- javascript中复选框的Checked属性
- 阻止复选框道具“checked”更新
- AngularJS:复选框中的checked属性没有'不起作用
- 选中复选框代码不起作用 if($('#primayins').attr('checked'
- JQuery 复选框不会更改 .prop(“checked”, true) 处的视觉状态
- jQuery:将复选框的视觉输出更改为checked
- 在实际设置checked标志之前,运行脚本onclick的复选框
- checked=true,来自前面的复选框
- when是添加到DOM的复选框元素的checked属性
- 在JQuery中,为什么可以't调用removeAttr(“checked”)后,我选中一个复选框
- 在复选框单击事件中,无法删除checked="checked'属性
- 如何根据条件动态设置Aurelia中的复选框上的checked属性
- JavaScript -使用"checked/unchecked复选框"IF ELSE条件语句
- 设置为checked = false的复选框不起作用
- 复选框被选中,但是:checked不起作用
- 当javascript中checked属性设置为true时,复选框在UI中不会显示为checked
- 对象在设置attr('checked');后检查复选框是否被选中时,在IE8中不支持此属性或方法