我对以下代码片段有疑问。我的想法是在我单击 Add Category
按钮时生成另一个类别,因此会出现一个蓝色的新框,红色框内带有第一行标有 Section 1
的复选框。在该框内,如果我单击 Add Section
按钮,它会添加另一行复选框,依此类推。因此,红色框中的 Section
标签在特定的蓝色框中从 1 开始递增。问题是当我点击另一个蓝色框中的添加部分时,标签不会相应增加。此外,如何触发 Save
按钮以分别获取每个蓝色框的选中复选框和输入字段的值?
请帮忙,我完全被这个困住了。谢谢。
var categoryCount = 1;
$('.js-add-category').click(function() {
categoryCount++;
var categoryContent = `<div class="serv-content">
<div class="title-content">
<input type="text" id="name-title-`+categoryCount+`" class="name-title" value="name-`+categoryCount+`">
</div>
<div class="cars-item js-cars-item">
<ul>
<li>
<input type="checkbox" id="car-1-2">
<label for="car-1"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-2-2">
<label for="car-2"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-3-2">
<label for="car-3"><i class="icon-tick"></i></label>
</li>
</ul>
<div class="footer">
<span class="num"> Section 1 </span>
</div>
</div>
<div class="action-btn">
<button type="button" class="js-add-section">Add Section</button>
<button type="button" class="js-save-section">Save</button>
</div>
</div>
<br>`
$('.main-content').append(categoryContent);
});
var count = 1;
$(document.body).on('click', 'button.js-add-section', function() {
count++;
var sectionContent = `<div class="cars-item js-cars-item-sub-items">
<ul>
<li>
<input type="checkbox" id="car-1-2">
<label for="car-1-2"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-2-2">
<label for="car-2-2"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-3-2">
<label for="car-3-2"><i class="icon-tick"></i></label>
</li>
</ul>
<div class="footer">
<span class="num"> Section`+count+` </span>
</div>
</div>`
$(this).closest('.serv-content').append(sectionContent);
});
$(document.body).on('click', 'button.js-save-section', function() {
// get selected checkboxes's values
});
$(".main-content").on('change', '.js-cars-item-sub-items [type="checkbox"]', function () {
var idx = $(this).closest('li').index(); //Get the index - Number in order
var chk = $(this).is(":checked"); //Get if checked or not
var obj = this; //Checkbox object
$(this).closest('.serv-content').find('.js-cars-item-sub-items').each(function () {
$(this).find('li:eq(' + idx + ') [type="checkbox"]').not(obj).prop("checked", false);
});
var checkeds = [];
$(this).closest(".serv-content").find(".js-cars-item-sub-items input:checkbox:checked").each(function (index) {
checkeds[index] = $(this).attr('id');
});
console.clear();
console.log("These are checked:", checkeds);
});
.cars-item {
box-sizing: content-box;
width: auto;
height: auto;
padding: 10px;
border: 3px solid red;
}
ul {
/* Added to fully show console in snippet */
margin: 2px;
}
li {
display: inline;
}
.serv-content {
box-sizing: content-box;
width: 250px;
height: auto;
padding: 10px;
border: 5px solid blue;
}
.cars.saved {
border-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button" class="js-add-category">Add Category</button> <br> <br>
<div class="main-content">
<div class="serv-content">
<div class="title-content">
<input type="text" id="name-title-1" class="name-title" value="name-1">
</div>
<div class="cars-item js-cars-item">
<ul>
<li>
<input type="checkbox" id="car-1">
<label for="car-1"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-2">
<label for="car-2"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-3">
<label for="car-3"><i class="icon-tick"></i></label>
</li>
</ul>
<div class="footer">
<span class="num"> Section 1 </span>
</div>
</div>
<div class="action-btn">
<button type="button" class="js-add-section">Add Section</button>
<button type="button" class="js-save-section">Save</button>
</div>
</div>
<br>
</div>
<br>
最佳答案
您正在计算总出现次数(每次添加时递增)。我建议您计算当前类别中的部分数量,并以此来决定新创建部分的数量。
此外,我真的建议您将 HTML 保留在 HTML 中,而不是在 javascript 中。这对以后会有很大的帮助。你可以做的是将这些元素放在一个隐藏的 div 中,这样你就可以在需要时克隆它们......
var categoryCount = 1;
$('.js-add-category').click(function() {
categoryCount++;
var categoryContent = `<div class="serv-content">
<div class="title-content">
<input type="text" id="name-title-`+categoryCount+`" class="name-title" value="name-`+categoryCount+`">
</div>
<div class="cars-item js-cars-item">
<ul>
<li>
<input type="checkbox" id="car-1-2">
<label for="car-1"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-2-2">
<label for="car-2"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-3-2">
<label for="car-3"><i class="icon-tick"></i></label>
</li>
</ul>
<div class="footer">
<span class="num"> Section 1 </span>
</div>
</div>
<div class="action-btn">
<button type="button" class="js-add-section">Add Section</button>
<button type="button" class="js-save-section">Save</button>
</div>
</div>
<br>`
$('.main-content').append(categoryContent);
});
var count = 1;
$(document.body).on('click', 'button.js-add-section', function() {
//count++;
let count = $(this).parent().parent().find('.cars-item').length+1;
var sectionContent = `<div class="cars-item js-cars-item-sub-items">
<ul>
<li>
<input type="checkbox" id="car-1-2">
<label for="car-1-2"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-2-2">
<label for="car-2-2"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-3-2">
<label for="car-3-2"><i class="icon-tick"></i></label>
</li>
</ul>
<div class="footer">
<span class="num"> Section`+count+` </span>
</div>
</div>`
$(this).closest('.serv-content').append(sectionContent);
});
$(document.body).on('click', 'button.js-save-section', function() {
// get selected checkboxes's values
});
.cars-item {
box-sizing: content-box;
width: auto;
height: auto;
padding: 10px;
border: 3px solid red;
}
ul {
/* Added to fully show console in snippet */
margin: 2px;
}
li {
display: inline;
}
.serv-content {
box-sizing: content-box;
width: 250px;
height: auto;
padding: 10px;
border: 5px solid blue;
}
.cars.saved {
border-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button" class="js-add-category">Add Category</button> <br> <br>
<div class="main-content">
<div class="serv-content">
<div class="title-content">
<input type="text" id="name-title-1" class="name-title" value="name-1">
</div>
<div class="cars-item js-cars-item">
<ul>
<li>
<input type="checkbox" id="car-1">
<label for="car-1"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-2">
<label for="car-2"><i class="icon-tick"></i></label>
</li>
<li>
<input type="checkbox" id="car-3">
<label for="car-3"><i class="icon-tick"></i></label>
</li>
</ul>
<div class="footer">
<span class="num"> Section 1 </span>
</div>
</div>
<div class="action-btn">
<button type="button" class="js-add-section">Add Section</button>
<button type="button" class="js-save-section">Save</button>
</div>
</div>
<br>
</div>
<br>
关于javascript - 在jquery中获取动态添加的复选框的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50461317/