Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 这不能正确切换_Jquery - Fatal编程技术网

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>