作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试处理一个我无法确定其名称的问题(因此在谷歌搜索时遇到麻烦)。
它处理一组类似“开关”的复选框。
以下是细节:
并发症:
可能的解决方案:
我正在寻找以前处理过此类问题的设计模式。如果有人知道一个没有真正名称的解决方案模式,那么也欢迎提供该知识。
感谢阅读!
最佳答案
我相信您只需要依赖 checkboxen 的 javascript onclick 事件。
有2种情况:
click
方法。click
方法。依赖图可以描述为一个矩阵,列索引和行索引表示框编号,矩阵单元格表示行框依赖、依赖或与列框无关。
您可能想使用一个单独的数组来保存框名称和索引之间的映射。
当然,您必须确保您的依赖图中没有循环,否则您最终会导致事件触发器递归调用自身。
更新:
我尝试了自己的解决方案,看看效果如何。
HTML 文档:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<table>
<thead>
<colgroup>
<col width='80'>
<col width='20'>
</colgroup>
<colgroup>
<col width='80'>
<col width='20'>
</colgroup>
<colgroup>
<col width='80'>
<col width='20'>
</colgroup>
<tr>
<th colspan="2">Level 1</th>
<th colspan="2">Level 2</th>
<th colspan="2">Level 3</th>
</tr>
<tbody>
<tr>
<td colspan='4'></td>
<td rowspan='0'><label for='top' >top</label></td>
<td rowspan='0'><input type='checkbox' id='top' value=''/></td>
</tr>
<tr>
<td colspan='2'></td>
<td rowspan='3'><label for='grp1' >grp1</label></td>
<td rowspan='3'><input type='checkbox' id='grp1' value=''/></td>
</tr>
<tr>
<td><label for='id1' >id1</label></td>
<td><input type='checkbox' id='id1' value='abc'/></td>
</tr>
<tr>
<td><label for='id2' >id2</label></td>
<td><input type='checkbox' id='id2' value='def'/></td>
</tr>
<tr>
<td><label for='id3' >id3</label></td>
<td><input type='checkbox' id='id3' value='ghi'/></td>
</tr>
<tr>
<td colspan='2'></td>
<td rowspan='3'><label for='grp2' >grp2</label></td>
<td rowspan='3'><input type='checkbox' id='grp2' value=''/></td>
</tr>
<tr>
<td><label for='id4' >id4</label></td>
<td><input type='checkbox' id='id4' value='klm'/></td>
</tr>
<tr>
<td><label for='id5' >id5</label></td>
<td><input type='checkbox' id='id5' value='nop'/></td>
</tr>
<tr>
<td><label for='id6' >id6</label></td>
<td><input type='checkbox' id='id6' value='qrs'/></td>
</tr>
</tbody>
</table>
<hr>
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/multicheck.js" type="text/javascript"></script>
</body>
</html>
和javascript文件:
var data = {
depends: {
id1 : ['grp1'],
id2 : ['grp1'],
id3 : ['grp1', 'grp2'],
id4 : ['grp2'],
id5 : ['grp2', 'grp1'],
id6 : ['grp2'],
grp1 : ['top'],
grp2 : ['top']
},
owns : {
grp1 : ['id1','id2','id3', 'id5'],
grp2 : ['id4','id5','id6', 'id3'],
top : ['grp1','grp2']
}
};
function check(elt){
var target = elt.target;
if (!target.checked) {
// unchecking -> uncheck depends
for (e in data.depends[target.id]) {
$("input#"+data.depends[target.id][e]).each(
function(){
if (this.checked)
this.click();
});
}
}
else {
// checking -> check owns
for (e in data.owns[target.id]) {
$("input#"+data.owns[target.id][e]).each(
function (){
if (!this.checked)
this.click();
});
}
}
return true;
}
(function(){
$(document).ready(function(){
$("input[type='checkbox']").bind('click',check);
});
})();
数据对象包含了所有的依赖信息:depends
列出了所有“直接依赖”的关系,owns
列出了反向关系。
虽然它表示依赖图,但我直接使用boxen的ids作为索引,并将其一分为二。
示例:
top
被检查时,所有其他的 boxen 也会在级联中被检查(首先是 grp1
,检查它拥有的所有 id,然后是 grp2
同样)。id5
未选中时,grp1
、top
和 grp2
将按此级联顺序取消选中。<_Remark:我不精通jquery,所以可能有更简洁的方法来获得相同的结果。 _
关于javascript - 处理 "Switchlike"复选框的模式名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996579/
我正在尝试处理一个我无法确定其名称的问题(因此在谷歌搜索时遇到麻烦)。 它处理一组类似“开关”的复选框。 以下是细节: 我正在使用 image mapster plugin使用类似于该演示的复选框设置
我是一名优秀的程序员,十分优秀!