function toggleTree(layergroupID) {
$("#LayerUL" + layergroupID).slideToggle(function() {
if ($(this).is(':hidden')) {
$("#layerCollaspe" + layergroupID).addClass("glyphicon-plus");
$("#layerCollaspe" + layergroupID).removeClass("glyphicon-minus");
} else {
$("#layerCollaspe" + layergroupID).removeClass("glyphicon-plus");
$("#layerCollaspe" + layergroupID).addClass("glyphicon-minus");
}
});
}
function chkAll(layergroupID) {
$("#LayerUL1 li input[type='checkbox']").prop('checked', this.checked);
if (($("#chk-layer" + layergroupID).prop("checked") == true && ($("#LayerUL" + layergroupID).is(':hidden')))) {
toggleTree(layergroupID);
} else if (($("#chk-layer" + layergroupID).prop("checked") == false) && ($("#LayerUL" + layergroupID).is(':visible'))) {
toggleTree(layergroupID);
}
}
function loadLayerGroups() {
$('#tbl tr').remove();
$.ajax({
url: "../getLayerGroups",
datatype: 'json',
type: 'GET',
success: function(data) {
for (var i = 0; i <= data.length - 1; i++) {
var layerGroupID = data[i].LAYERGROUPID;
var liID = "layer" + layerGroupID;
var chkboxID = "layerCollaspe" + layerGroupID;
var markup = " <li id='" + liID + "' >"
+
"<i class='glyphicon glyphicon-plus' id='" + chkboxID + "'" +
" onclick='toggleTree(" + layerGroupID + ")'></i>"
+
"<input type='checkbox' id='chk-layer" + layerGroupID + "' onclick='chkAll(" + layerGroupID + ")'>"
+
data[i].GROUPNAME + "</i></li>" +
"<ul id='LayerUL" + layerGroupID + "'></ul>"
$("#ulLayer").append(markup);
getChild(layerGroupID);
$("#LayerUL" + layerGroupID).hide();
}
},
error: function(textStatus, errorThrown) {
console.log(errorThrown);
}
});
}
function getChild(layerGroupID) {
$.ajax({
url: "../getLayer",
datatype: 'json',
type: 'GET',
data: {
LAYERGROUPID: layerGroupID
},
success: function(data2) {
for (var x = 0; x <= data2.length - 1; x++) {
var markup2 = "<li>" +
"<label class='checkbox-inline'>" +
"<input type='checkbox' class='chkLL' value='" + data2[x].CLASSID + "'>" +
data2[x].DISPLAYNAME +
"</label>" +
"</li>";
$("#LayerUL" + layerGroupID).append(markup2);
}
}
});
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row">
<div class="col-md-6">
<div id="treeview-checkbox-demo">
<ul id="ulLayer" class="Layers">
</ul>
</div>
</div>
</div>
&#13;
所以我有这个代码从数据库中获取列表。 该列表包含父母和子女:
当我单击底图chck框时,将检查底图的所有复选框
当我创建一个像下面的代码一样的jquery函数时,它可以工作。所有复选框都会被选中。
$("#chk-layer" + layergroupID)click(function () {
$("#LayerUL" + layergroupID + " li input[type='checkbox']").prop('checked', this.checked);
})
但是当我尝试创建这样的函数时:
function chkAll(layergroupID)
{
$("#LayerUL" + layergroupID + " li input[type='checkbox']").prop('checked', this.checked);
}
我得到所有参数,唯一的问题是复选框 这是行不通的。
我需要一个函数,因为我从ajax的数据传递一个参数。 当我在ajax中创建jquery函数时,我得到的参数来自最后一项。
提前致谢
已更新
这就是我调用函数的方式
+ "<input type='checkbox' id='chk-layer" + layerGroupID + "' onclick='chkAll(" + layerGroupID + ")'>"
第二次编辑
有一个填充ulLayers的ajax函数
function loadLayerGroups() {
$('#tbl tr').remove();
$.ajax({
url: "../getLayerGroups",
datatype: 'json',
type: 'GET',
success: function (data) {
for (var i = 0 ; i <= data.length - 1; i++) {
var layerGroupID = data[i].LAYERGROUPID;
var liID = "layer" + layerGroupID;
var chkboxID = "layerCollaspe" + layerGroupID;
var markup = " <li id='" + liID + "' >"
+ "<i class='glyphicon glyphicon-plus' id='" + chkboxID + "'"
+ " onclick='toggleTree(" + layerGroupID + ")'></i>"
+ "<input type='checkbox' id='chk-layer" + layerGroupID + "' onclick='chkAll(" + layerGroupID + ")'>"
+ data[i].GROUPNAME + "</i></li>"
+ "<ul id='LayerUL" + layerGroupID + "'></ul>"
$("#ulLayer").append(markup);
getChild(layerGroupID);
$("#LayerUL" + layerGroupID).hide();
}
},
error: function (textStatus, errorThrown) {
console.log(errorThrown);
}
});
}
这是填充LayerUL的第二个ajax函数
function getChild(layerGroupID)
{
$.ajax({
url: "../getLayer",
datatype: 'json',
type: 'GET',
data: { LAYERGROUPID: layerGroupID },
success: function (data2) {
for (var x = 0 ; x <= data2.length - 1; x++) {
var markup2 = "<li>"
+ "<input type='checkbox' class='chkBox-" + layerGroupID + "' value='" + data2[x].CLASSID + "'>"
+ data2[x].DISPLAYNAME + "</li>";
$("#LayerUL" + layerGroupID).append(markup2);
}
}
});
}
答案 0 :(得分:0)
由于HTML不可用,下面是将事件附加到任何ID为chk-layer
的复选框的通用代码,并且在事件处理程序中,相同的文本已被替换以获取图层ID。
更改您的代码,如下所示。
$(document).ready(function(){
$(document).on('change','input[type="checkbox"][id^="chk-layer"]' function() {
$("#LayerUL " + this.id.replace("chk-layer","") + " li input[type='checkbox']").prop('checked', this.checked);
});
});
此外,如果您在同一个ul中选中所有复选框并想要检查该ul的所有复选框,那么您可以尝试通过添加类来选择所有复选框,如下所示。
$(document).ready(function() {
$(document).on('change', '.chkAll', function() {
$(this).parent().next().find(":checkbox").prop("checked", this.checked);
});
});
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
<div class="row">
<div class="col-md-6">
<div id="treeview-checkbox-demo">
<ul id="ulLayer" class="Layers">
<li id="Layer1">
<input type="checkbox" class="chkAll" id="chk-layerLayer1"> Select All
</li>
<li>
<ul id="LayerULLayer1">
<li>
<input type="checkbox"> Child 1
</li>
<li>
<input type="checkbox"> Child 2
</li>
<li>
<input type="checkbox"> Child 3
</li>
</ul>
</li>
<li id="Layer1">
<input type="checkbox" class="chkAll" id="chk-layerLayer1"> Select All
</li>
<li>
<ul id="LayerULLayer1">
<li>
<input type="checkbox"> Child 1
</li>
<li>
<input type="checkbox"> Child 2
</li>
<li>
<input type="checkbox"> Child 3
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
答案 1 :(得分:0)
在函数chkAll()中,你不能使用$(this)
答案 2 :(得分:0)
我已经找到了一个简单的解决方案,可以检查复选框。
$("#LayerUL" + layergroupID + " li input[type='checkbox']").trigger('click');
触发它将检查复选框并触发事件问题解决。
非常感谢