Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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无法选中复选框_Javascript_Jquery_Html_Css_Checkbox - Fatal编程技术网

JavaScript无法选中复选框

JavaScript无法选中复选框,javascript,jquery,html,css,checkbox,Javascript,Jquery,Html,Css,Checkbox,这是我的代码: 以下是来自JSFIDLE的javascript: $(document).ready(function() { $(document).click(function(event) { //line 1 if(!$(event.target).closest('.menu').length) { //line 2 if ($('.menu-btn').is(':checked')) { //line 3

这是我的代码:

以下是来自JSFIDLE的javascript:

$(document).ready(function() {
    $(document).click(function(event) { //line 1
        if(!$(event.target).closest('.menu').length) { //line 2
            if ($('.menu-btn').is(':checked')) { //line 3
                $('.menu-btn').trigger('click'); //line 4
            }
        }        
    })
})
如您所见,第1行用于检测用户是否要单击页面。第2行是检测用户是否单击除.menu元素(黑色背景中的任何位置)之外的任何位置。第3行用于检测是否选中了.menu btn复选框。如果选中该复选框,则会触发对复选框的单击


因此,下面是代码摘要:如果用户单击除黑框区域以外的任何位置,并且复选框被选中,代码将触发单击复选框,并取消选中复选框问题是,该复选框甚至根本不检查。为什么不起作用?

使用jQuery取消选中复选框的正确方法:

$('.menu-btn').prop( "checked", false );

您想将外部if支票更改为

if(!$(event.target).最近('.menu').length&&!$(event.target).hasClass('menu-btn')){

您现在的操作方式是查看单击目标是否有一个带有
.menu
类的祖先,但是如果您单击复选框,它将没有该祖先。这意味着外部的if检查将通过,而内部的if检查将通过,因为刚才的单击选中了该复选框。这将运行该行

$('.menu btn').prop(“选中”,false);


有点表达力,但我希望读者能更清楚地了解:

$(document).ready(function() {
  var $window = $(window);
  var $btn = $('.menu-btn');

  $window.on('click', function (event) {
    var $target = $(event.target);

    if($target.is($btn)) {
      return;
    }

    if($btn.is(':checked') === false) {
      return;
    }

    if ($target.closest('.menu').length > 0) {
      return;
    }

    $btn.prop('checked', false);

  });
});

您的处理程序设置为每次选中复选框时都触发一个
点击
,因此您立即取消选中它。@Rayon现在我可以选中复选框,但当我点击黑框区域之外的某个地方时,我无法取消选中复选框。@AndréDion我不明白,我如何修复它?哦,我不知道,但它仍然不起作用k:@pixie123你的JSFIDLE似乎正是它应该对我做的。当你点击复选框时,它不在菜单中。它现在被选中了,所以你的javascript取消选中它。我相信这就是OP想要的答案是的,谢谢它起作用了,但是看这里:我想点击标签并选中复选框。这很有效。但我不能取消选中复选框是标签。如何解决此问题?要单击标签以选中还是取消选中复选框?完全正确。我要单击标签以选中并取消选中复选框。如果选中复选框,并且用户单击除“黑色区域框”以外的任何位置,我也要取消选中复选框。是的,看起来你找到了,干得好。