在两个复选框之间切换
Toggle between two checkboxes
我有两个复选框。一个用于显示列,另一个用于显示列中的项目。用户可以选中以使列名称可见,而无需选中该框以显示列中的项目。但是,如果用户选中该框以显示列中的项目。必须选中用于显示列的复选框,因为如果不使列也可见,则无法使项目在列中可见。
我很难想到一种逻辑可以在不绕圈子的情况下做到这一点。
<div>
<div class="span3">Column is visible:</div>
<div class="span9"><input type="checkbox" data-name="viewable" data-bind="checked: columnViewable" /></div>
</div>
<div>
<div class="span3">Column items are visible:</div>
<div class="span9"><input type="checkbox" data-name="viewableItems" data-bind="checked: columnItemsViewable" /></div>
</div>
这是我对 js 的:
editElement.editElement = function () {
if (editElement.viewableItems()) {
editElement.columnViewable = ko.observable(true);
var columnView = editElement.columnViewable();
}
else
columnView = editElement.columnViewable();
grain.Ajax.Post({..submit data including checked boxes...})
};
如果两个框都未选中,并且如果我选中可查看项目并保存它,它会自动将该列设置为 true,它对我来说工作正常。但是,如果两者都选中并且我取消选中列可见性并保存 - 它将重新检查列可见性,因为检查了可视项目。
如果可查看列未选中,我是否应该禁用可查看项目复选框,这样两者都将设置为 false?
你不需要很多逻辑。 这是一个非常简单的jQuery解决方案:
$('#column,#item').hide();
function displayCol(check) {
if (check) {
$('#column').show();
} else {
$('#column').hide();
$('#itemChanger').prop('checked',false);
}
}
function displayItem(check) {
if (check) {
$('#column,#item').show();
$('#columnChanger').prop('checked',true);
} else {
$('#item').hide();
}
}
#column {
width: 200px;
height: 200px;
background: green;
}
#item {
width: 100px;
height: 100px;
background: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="column">Column
<div id="item">Item</div>
</div>
Show Column:
<input type="checkbox" id="columnChanger" onchange="displayCol(this.checked)" />
<br/>Show Item:
<input type="checkbox" id="itemChanger" onchange="displayItem(this.checked)" />
我这样做的方法是在未选中"显示列"时禁用"显示项目"输入,并尝试使两个控件尽可能独立地运行:
.HTML:
<div class="column">
<h1 class="title">Column 1</h1>
<p class="item">Item 1</p>
<p class="item">Item 2</p>
<p class="item">Item 3</p>
<p class="item">Item 4</p>
<div class="controls">
<input id="show-items-1" class="show-items" type="checkbox" checked="checked" />
<label for="show-items-1">Show items</label>
<br/>
<input id="show-column-1" class="show-column" type="checkbox" checked="checked" />
<label for="show-column-1">Show column</label>
</div>
</div>
<div class="column">
<h1 class="title">Column 2</h1>
<p class="item">Item 1</p>
<p class="item">Item 2</p>
<p class="item">Item 3</p>
<p class="item">Item 4</p>
<div class="controls">
<input id="show-items-2" class="show-items" type="checkbox" checked="checked" />
<label for="show-items-2">Show items</label>
<br/>
<input id="show-column-2" class="show-column" type="checkbox" checked="checked" />
<label for="show-column-2">Show column</label>
</div>
</div>
.JS:
$("input", this).on("change", function () {
var state = $(this).is(":checked"),
showColumn = $(this).attr("class").search(/column/) > -1,
elems = $(this).parents(".column").find("p");
if (state) {
if (showColumn) {
$(this).siblings(".show-items").removeAttr("disabled");
elems = $(this).siblings(".show-items").is(":checked") ? elems = $(this).parents(".column").find("h1,p") : $(this).parents(".column").find("h1");
}
elems.removeClass("hidden");
} else {
if (showColumn) {
$(this).siblings(".show-items").attr("disabled", true);
elems = $(this).parents(".column").find("h1, p");
}
elems.addClass("hidden");
}
});
JSFiddle:
这是一个工作JSFiddle供参考。
相关文章:
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- JavaScript-使用sessionStorage保存文档之间共享的复选框状态
- 如何使用复选框在同一按钮上的链接之间切换
- j查询复选框的更改和单击事件之间的差异
- 选中所选值之间的 Javascript 集复选框
- 在两个复选框之间切换
- 显示两个复选框元素的标题之间的数学差异
- 在网格视图中的复选框和单击按钮时的验证之间切换
- jQuery-使用复选框在背景图片和背景视频之间切换
- jQuery删除了索引位于两个值之间的复选框
- 在表单操作与复选框或单选按钮之间交替进行
- 使用Javascript在表单之间传递数据时预先检查复选框
- 如何更改输入标签之间的文本,并将标签复选框和图标对齐在一行上
- 在部分之间导航后保持复选框处于选中状态
- 复选框和下拉菜单之间的事件绑定
- 使用jQuery检查/取消表之间的复选框
- 如何使用复选框在选中或未选中时在选项卡之间切换
- AngularJS:在多个复选框之间单选
- AngularJS e2e测试选择(下拉)、输入单选框和输入复选框之间的差异
- 在asp.net页之间传递复选框值