如何在不同的 div 中有两个单独的复选框,同时选中和取消选中? [复制]

Posted

技术标签:

【中文标题】如何在不同的 div 中有两个单独的复选框,同时选中和取消选中? [复制]【英文标题】:How to have two separate checkboxes in different divs, become checked and unchecked simultaneously? [duplicate] 【发布时间】:2020-05-21 17:00:10 【问题描述】:

我创建了两个启用暗模式的复选框。我有一个在移动导航中,一个在桌面导航中。

800px,移动复选框变为display:none,桌面复选框变为display:block,反之亦然,在800px之前。

如果我从桌面开始,启用暗模式并转到移动设备,则未选中移动复选框,当我选中它时,亮模式有效,但桌面复选框现在指的是相反的。

我目前正在尝试同时选中两个复选框并在单击输入时将它们标记为':checked'

我的问题是,当复选框为 display:none 且当前不在 DOM 中时,您无法将复选框标记为选中?

Codepen here.

$(document).ready(function() 

  $('input[type="checkbox"]').on('click', () => 

    $('body').toggleClass('darkMode');

    $('mobile-checkbox').is(':checked');
    $('desktop-checkbox').is(':checked');

  );

);
.darkMode 
  background-color: black;


.mobile 
  display: inline-block;
  box-shadow: 5px 5px 5px blue;


.desktop 
  display: none;
  box-shadow: 5px 5px 5px green;


@media (min-width:800px) 
  .mobile 
    display: none;
  
  .desktop 
    display: inline-block;
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
  <div class="mobile">
    <input class="mobile-checkbox" type="checkbox">
  </div>

  <div class="desktop">
    <input class="desktop-checkbox" type="checkbox">
  </div>
</body>

【问题讨论】:

$('mobile-checkbox').is(':checked'); 只返回真或假。 $('mobile-checkbox').prop('checked', true/false); 将改变状态。另请记住,您的移动和桌面复选框选择器无效。您缺少 . 类表示 旁注;如果保证选择器只返回一个结果,而不是使用is(':checked'),只需使用prop('checked') 来访问属性而不是使用伪选择器来评估元素 添加相同的name 属性到输入 Dude... 代码中的问题是应用了样式您无法访问具有样式 display:none 的 html 元素...您可以使用 visibility:hidden 访问 Dom 中的 HTML 元素它会起作用 @abhijeetabanave 你在说什么?一个元素是可见的。如果媒体查询适用,则可见性交换。但是一个会是可见的。此外,可见性不会改变 javascript 在 dom 中找到它们的能力。 【参考方案1】:

代码可能看起来更好,但这里有一个简单的解决方案:

$( document ).ready(function() 
  var $checkboxes = $('input[type="checkbox"]');
    $checkboxes.on('change', function()
      if(this.checked)
        $('body').addClass('darkMode');
        $checkboxes.prop('checked', true);
      
      else
        $('body').removeClass('darkMode');
        $checkboxes.prop('checked', false);
      
    );
);

它的作用:

在更改时,检查选中输入的值,并将相同的值应用于所有复选框。

不要在这里使用arrow function,因为我们需要this

【讨论】:

【参考方案2】:

您只需将属性设置为选中以匹配已更改的选中状态。我添加了一个控制台日志,以便您可以看到反映的更改。我还为两个复选框添加了一个通用类,以使选择更容易。

$(document).ready(() => 
  let $body = $(document.body);
  let $viewSelectors = $('.view-selector').on('click', e => 
    $body.toggleClass('darkMode');
    $viewSelectors.prop('checked', e.target.checked);
    
    console.log($viewSelectors.map((index, it) => it.checked).get());
  );
);
.darkMode 
  background-color: black;


.mobile 
  display: inline-block;
  box-shadow: 5px 5px 5px blue;


.desktop 
  display: none;
  box-shadow: 5px 5px 5px green;


@media (min-width:800px) 
  .mobile 
    display: none;
  
  .desktop 
    display: inline-block;
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="mobile">
  <input class="mobile-checkbox view-selector" type="checkbox">
</div>

<div class="desktop">
  <input class="desktop-checkbox view-selector" type="checkbox">
</div>

【讨论】:

以上是关于如何在不同的 div 中有两个单独的复选框,同时选中和取消选中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个单独的 javascript 合并为一个?

div+css中将默认的单选按钮样式(圆的)变成正方形的样式怎么写?

基于两个单选按钮和选择选项的jQuery显示和隐藏divs

显示不同浏览器中复选框/单选按钮的问题

在具有两种形式的页面上包含复选框验证器

在两个不同的DataTable中单独过滤数据