我在列表中嵌入了几个列表。
- [X] Top List 项目 1
- [X] 内表项 1
- [X] 内部清单项目 2
- [X] 内内表项 1
- [X] 内内列表项 2
- [X] 内表项 3
- [X] Top List 项目 2
- [X] Top List 项目 3
该列表是按程序构建的,因此这只是一个非常基本的示例,实际上它要大得多。[X] 是一个复选框。这些数字是单击时切换内部列表的链接。因此,单击“顶部列表项 1”上的“1”将使内部列表项 1、2 和 3 显示。
该列表的结构如下:
<ul>
<li> Top List item 1
<ul>
<li> Inner List item 1</li>
<li> Inner List item 2
<ul>
<li> Inner Inner List item 1</li>
<li> Inner Inner List item 2</li>
</ul>
</li>
<li> Inner List item 3</li>
</ul>
</li>
<li> Top List item 2</li>
<li> Top List item 3</li>
</ul>
我想要做的是,当有人单击列表项中的链接时,它将切换(显示/隐藏)内部列表项。
但是现在,当我单击“内部内部列表项 1”时,它会检查顶部列表项 1 及其内部的所有内容。此外,当我单击链接以切换内部列表时,它会检查所有复选框。
这是Jquery。
$("li:has(a)").click(function() {
var checkbox = $("input[type=checkbox]", this);
checkbox.prop('checked', !checkbox.prop("checked"));
if(checkbox.data('check')) {
$("#" + checkbox.id + " input[type=checkbox").each(function(){
this.prop('checked', !checkbox.prop("checked"));
});
}
});
这是我用来切换它的 Jquery:
$("#patterns-data a[data-toggleid]").click(function() {
var toggleid = $(this).data('toggleid');
$("#" + toggleid).toggle();
});
所以我需要的是 jquery,它允许用户单击列表项上的任意位置以检查其复选框。如果列表项中有另一个列表,请选中所有这些复选框。如果用户单击链接以切换列表(标签),则不要检查任何内容,只需切换列表即可。
将这两个点击事件结合起来可能是个好主意,但我不确定最好的方法。感谢您的帮助。
编辑:
好的,我正在研究,发现单击事件被多次调用,每个 li 嵌套一次。所以我更改了我的代码以使用 stopPropagation。它现在只选择单击的项目复选框。我仍然需要它来选择单击列表项内的所有列表项复选框。
$("li:has(a)", "#patterns-data").click(function(e) { e.stopPropagation();
var checkbox = $("> input[type=checkbox]", this);
checkbox.prop('checked', !checkbox.prop("checked"));
$("> li", this).each(function(){
var chkbox = $("> input[type=checkbox]", this);
chkbox.prop('checked', !checkbox.prop("checked"));
});
});
它还需要忽略对标签的点击,以便当用户尝试切换列表时复选框不会检查。
这是 JSFiddle 上的代码http://jsfiddle.net/683Te/