jquery - jQuery - 如果选中复选框(多个条件),则删除活动类
问题描述
我想保持一次只有一个.menu
active
,所以我设置了代码来删除最后.menu
一个接收类的活动active
类。我不能使用id
,因为我有多个项目,每个项目都有自己的唯一 ID,所以我尝试使用data-type
&data-id
来调用每组唯一的按钮和菜单。
当在每个项目上选择其他单选按钮之一时,如何获取代码以删除最后一active
类 a ?.menu
换句话说,将active
类赋予.menu
它的相应按钮,但如果选中另一个收音机或再次选中它(删除所有active
菜单),则将其删除。
$('input[name="studio"]').change(function() {
var t = $(this).closest(".item");
var id = $(this).data("type");
$(".menu[data-id=" + id + "]").toggleClass("active", this.checked);
var menuCat = t.find(".menu--categories");
var menuLoc = t.find(".menu--locations");
var menuProj = t.find(".menu--projects");
var btnCat = $(this).closest(".cat_label").find("input[id=" + id + "]");
var btnLoc = $(this).closest(".loc_label").find("input[id=" + id + "]");
var btnProj = $(this).closest(".proj_label").find("input[id=" + id + "]");
if (btnCat.is(":checked") && $(this).attr("id") === btnLoc) {
btnLoc.prop("checked", true);
btnCat.prop("checked", false);
btnProj.prop("checked", false);
menuCat.removeClass("active");
}
if (btnCat.is(":checked") && $(this).attr("id") === btnProj) {
btnProj.prop("checked", true);
btnLoc.prop("checked", false);
btnCat.prop("checked", false);
menuCat.removeClass("active");
}
if (btnLoc.is(":checked") && $(this).attr("id") === btnCat) {
btnCat.prop("checked", true);
btnProj.prop("checked", false);
btnLoc.prop("checked", false);
menuLoc.removeClass("active");
}
if (btnLoc.is(":checked") && $(this).attr("id") === btnProj) {
btnProj.prop("checked", true);
btnCat.prop("checked", false);
btnLoc.prop("checked", false);
menuLoc.removeClass("active");
}
if (btnProj.is(":checked") && $(this).attr("id") === btnCat) {
btnCat.prop("checked", true);
btnProj.prop("checked", false);
btnLoc.prop("checked", false);
menuProj.removeClass("active");
}
if (btnProj.is(":checked") && $(this).attr("id") === btnLoc) {
btnLoc.prop("checked", true);
btnProj.prop("checked", false);
btnCat.prop("checked", false);
menuProj.removeClass("active");
}
});
.wrap {
display: flex;
}
.item {
border: 2px solid
}
.menu {
height: 20px;
width: 60px;
border: 1px solid
}
.active {
background: blue
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="item">
<div class="menu menu--categories" data-id="cat"></div>
<label class="cat_label" for="cat" data-btn="categories">
<input id="cat" data-type="cat" type="radio" name="studio" />
Categories
</label>
<div class="menu menu--locations" data-id="loc"></div>
<label class="loc_label" for="loc" data-btn="locations">
<input id="loc" data-type="loc" type="radio" name="studio" />
Locations
</label>
<div class="menu menu--projects" data-id="proj"></div>
<label class="proj_label" for="proj" data-btn="projects">
<input id="proj" data-type="proj" type="radio" name="studio" />
Projects
</label>
</div>
<div class="item">
<div class="menu menu--categories" data-id="cat_2"></div>
<label class="cat_label" for="cat_2" data-btn="categories">
<input id="cat_2" data-type="cat_2" type="radio" name="studio" />
Categories
</label>
<div class="menu menu--locations" data-id="loc_2"></div>
<label class="loc_label" for="loc_2" data-btn="locations">
<input id="loc_2" data-type="loc_2" type="radio" name="studio" />
Locations
</label>
<div class="menu menu--projects" data-id="proj_2"></div>
<label class="proj_label" for="proj_2" data-btn="projects">
<input id="proj_2" data-type="proj_2" type="radio" name="studio" />
Projects
</label>
</div>
解决方案
正如 Henrique 上面提到的,删除所有具有“菜单”类的项目的类。
$('input[name="studio"]').change(function() {
$('.menu').removeClass('active'); // add this line
推荐阅读
- arangodb - 如何导入不包含标题的 arangodb CSV 文件?
- amazon-web-services - 在 SAM (AWS IAC) 中将私有 API 网关连接到 VPC 的正确方法
- git - 在 github 中创建修补程序
- snowflake-cloud-data-platform - 如何使用 snowsql cli 客户端执行查询
- c# - 有没有办法检测磁盘托盘是否在 C# 中打开?
- python-3.x - 如何在熊猫数据框中一列的所有行中提取字符串中的大写单词?
- abap - 在 cl_salv_hierseq_table 中捕获 EXPAND 按钮
- rest - 如何在 Wagtail CMS 中使用 REST API
- excel - 在 BeforeClose 之后打开的看起来很奇怪的工作簿
- security - 通过 API 创建用户的最佳实践是什么?