Jquery 这不能正确切换
为什么不能正确切换Jquery 这不能正确切换,jquery,Jquery,为什么不能正确切换 $('#violation_form label').click(function() { //alert($(this).parent().prev().html()); var $checkbox = $(this).closest('li').find('input[type="checkbox"]'); console.log(!$checkbox.attr('checked')); $checkbox.attr('checked',
$('#violation_form label').click(function() {
//alert($(this).parent().prev().html());
var $checkbox = $(this).closest('li').find('input[type="checkbox"]');
console.log(!$checkbox.attr('checked'));
$checkbox.attr('checked', !$checkbox.attr('checked'));
});
DOM中没有
li
元素。还可以使用prop
设置复选框的开/关。试试这个:
$('#violation_form label').click(function() {
$checkbox = $(this).closest('form').find('input[type="checkbox"]');
console.log(!$checkbox.attr('checked'));
$checkbox.prop("checked", !$checkbox.prop("checked"));
});
您可以使用而不是.attr()
来设置复选框的选中状态:
$checkbox.prop('checked', !$checkbox.prop('checked'));
最终代码如下所示:
$('#violation_form label').click(function () {
//alert($(this).parent().prev().html());
var $checkbox = $(this).closest('li').find('input[type="checkbox"]');
console.log(!$checkbox.prop('checked'));
$checkbox.prop('checked', !$checkbox.prop('checked'));
});
也许你想要这个=>
您误用了
元素。当你可以直接点击时,没有必要用魔术让点击它影响相应的
。引用文件():
HTML
元素表示用户中项目的标题
接口。它可以通过放置
标签元素内的控件元素,或使用for
属性这样的控件称为标签的标签控件
元素
所以两者
<label><input type="checkbox" />Whatever</label>
不管怎样
。。。而且,更复杂但更灵活:
<input type="checkbox" name="some_checkbox" id="some_checkbox" />
<label for="some_checkbox">Whatever it is</label>
不管是什么
。。。会有用的
检查这一个,您在该结构中遗漏了
。现在它工作得很好
html中没有
li
-也可以使用.prop()代替.attr()。请参见没有li,jQuery没有定义,prop
比attr
更好。。。真的,为什么要急着发这么多问题呢?我的好先生,我请求你再看看链接。我已经纠正了以前的错误deformities@GeorgeNewton因为你需要在读取.attr()时使用.prop()-看到我上面贴的小提琴了吗?为什么要使用prop而不是attr?@GeorgeNewton:看,天哪,是的,dis太简单了!没有意识到您可以将标签包裹在元素周围,并放弃对使用,它是否可靠地像那样工作?我看过的任何文档都没有提到这样做。@MLeFevre为什么,我认为这是一个众所周知的特性。不过,刚刚添加了MDN的报价。)
<input type="checkbox" name="some_checkbox" id="some_checkbox" />
<label for="some_checkbox">Whatever it is</label>