【发布时间】:2020-05-21 17:00:10
【问题描述】:
我创建了两个启用暗模式的复选框。我有一个在移动导航中,一个在桌面导航中。
在800px,移动复选框变为display:none,桌面复选框变为display:block,反之亦然,在800px之前。
如果我从桌面开始,启用暗模式并转到移动设备,则未选中移动复选框,当我选中它时,亮模式有效,但桌面复选框现在指的是相反的。
我目前正在尝试同时选中两个复选框并在单击输入时将它们标记为':checked'。
我的问题是,当复选框为 display:none 且当前不在 DOM 中时,您无法将复选框标记为选中?
$(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 中找到它们的能力。
标签: javascript jquery html css checkbox