Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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
Javascript JQuery没有';t选择并更改复选框的状态_Javascript_Jquery_Html_Parent Child - Fatal编程技术网

Javascript JQuery没有';t选择并更改复选框的状态

Javascript JQuery没有';t选择并更改复选框的状态,javascript,jquery,html,parent-child,Javascript,Jquery,Html,Parent Child,这是html: <div class="btn btn-stock-report" id="superman"> Superman <input type="checkbox" name="superman" /> </div> 我试图实现的只是更改子复选框的状态并更改superman变量的值,但出于某种原因,它总是在控制台日志中打印出superman:false。即使我手动选中复选框并单击div,即使现在选中了复选框,它也会报告superman:f

这是html:

<div class="btn btn-stock-report" id="superman">
    Superman <input type="checkbox" name="superman" />
</div>
我试图实现的只是更改子复选框的状态并更改
superman
变量的值,但出于某种原因,它总是在控制台日志中打印出
superman:false
。即使我手动选中复选框并单击div,即使现在选中了复选框,它也会报告
superman:false

什么原因会导致这种情况?

您可以将
更改为
,然后去掉所有jQuery代码,它就会正常工作。

您应该使用
.prop()
而不是attr,因为选中的
是复选框的属性。此外,您还可以将代码范围缩小到:

$('#superman').on('click', function () {
 var chk = $(this).find('input:checkbox:first')
 chk.prop("checked", !chk.prop("checked"));
});

checked
是一个属性,应该使用
prop('checked',true)
设置。请查看JQuery中的
prop
方法:也请查看这个问题:深入讨论两者之间的区别。您正在重新实现浏览器已经完成的功能。你为什么不直接用一个
而不是
,然后在复选框更改时监听,
$(“#超人”)。on(“更改”,fn)?问题是-我已经试过了,但出于某种原因它不起作用。我知道,我知道,我不知道它是外部库还是什么,我不是说它根本不起作用,我只是说它对我不起作用。这就是我来这里的原因-看看是否还有其他解决方案。@NemanjaT:只有在fiddle/codepenI中重现问题时才有帮助。我完全忘记了标签更改复选框的状态。我现在就试试看你的反应太快了!;)我必须再等5分钟才能接受一个答案。请考虑编辑你的帖子,以进一步解释你的代码所做的以及为什么它会解决这个问题。一个只包含代码的答案(即使它在工作)通常不会帮助OP理解他们的问题。
$('#superman').on('click', function () {
 var chk = $(this).find('input:checkbox:first')
 chk.prop("checked", !chk.prop("checked"));
});
$('#superman').on('click', function () {
    superman = !$(this).children('input:checkbox:first').is(':checked');
    $(this).children('input:checkbox:first').prop('checked',superman);
    console.log("superman: " + superman);
});