提问人:Bill 提问时间:9/1/2022 更新时间:9/1/2022 访问量:41
如何使用jQuery循环变量从2开始,同时保持字段删除选项?
How can I use jQuery loop variable to start at 2 while maintaining field removal option?
问:
我发现这个片段可以向表单添加其他字段。效果很好。如果可以,请告诉我如何让添加的字段从 2 开始,同时保留删除它的选项。虽然 i = 2 确实有效,但我还没有弄清楚相应地添加/删除所述字段的选项需要什么。感谢您抽出宝贵时间接受采访。
$(document).ready(function() {
var i = 1;
$('#add').click(function() {
if (i <= 7) {
$('#dynamic_field').append('<div class="add-row" id="row' + i + '"><label" for="number_' + i + '">Number ' + i + '</label><input type="text" name="number_' + i + '" value=""></div>')
i++;
$('.btn-remove').removeClass('hidden');
}
});
$(document).on('click', '.btn-remove', function() {
var button_id = $(this).attr("id");
i--;
$('#row' + $('#dynamic_field div').length).remove();
if (i<=1) {
$('.btn-remove').addClass('hidden');
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" id="add" class="btn-add">Add Another Number</button> <button type="button" class="btn-remove hidden">Remove last</button>
<div id="dynamic_field"></div>
答:
0赞
mplungjan
9/1/2022
#1
你不需要自己计数
$(function() {
const $container = $("#dynamic_field");
let count = $container.children().length;
$('.btn-remove').toggle(count > 1);
$('#add').click(function() {
let count = $container.children().length;
if (count < 7) {
$('#dynamic_field').append(`<div class="add-row" id="row$(count)"><label" for="number_${count}">Number ${count+1}</label><input type="text" name="number_${count}" value=""></div>`);
count++;
}
$('.btn-remove').toggle(count > 0);
});
$(document).on('click', '.btn-remove', function() {
const $children = $container.children();
$children.last().remove();
let count = $children.length;
console.log(count)
$(this).toggle(count > 1);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" id="add" class="btn-add">Add Another Number</button> <button type="button" class="btn-remove hidden">Remove last</button>
<div id="dynamic_field"></div>
此外,您可以克隆现有行
$(function() {
const $container = $("#dynamic_field");
const getCount = () => $container.find(".add-row").length;
$('.btn-remove').toggle(getCount() > 1);
$('#add').click(function() {
let count = getCount();
if (count < 7) {
const $cloneDiv = $container.children().first().clone().appendTo($container);
$cloneDiv.find("input").val("").attr("name",`number${count+1}`);
$cloneDiv.find("label").text(`Number ${count+1}`);
}
$('.btn-remove').toggle(count > 0);
});
$(document).on('click', '.btn-remove', function() {
$container.find(".add-row").last().remove();
let count = getCount()
console.log(count)
$(this).toggle(count > 1);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" id="add" class="btn-add">Add Another Number</button> <button type="button" class="btn-remove hidden">Remove last</button>
<div id="dynamic_field">
<div class="add-row" id="1">
<label for="number_1">Number 1</label><input type="text " name="number_1 " value="" />
</div>
</div>
评论
0赞
Bill
9/1/2022
谢谢你的解决方案。由于上面发布的原因,我希望从 2 开始计数。
0赞
mplungjan
9/1/2022
正如你所看到的,我加一个来计数得到一个。如果你想要两个,那就做let count = $container.children().length+1;
1赞
Rory McCrossan
9/1/2022
#2
由于使用在运行时生成的属性,您的代码变得不必要地复杂化。id
通过在每一行中使用相同的内容,可以完全避免执行此操作,这些内容可以存储在元素中。请注意,此模板内容使用 no ,但改为 same,并且 包装 so no 属性是必需的。template
id
class
label
input
for
然后,您可以简单地获取 DOM 中现有行数来计算要显示的下一个数字。此外,由于“删除”按钮仅针对最后一行,因此您可以直接使用 ..row:last
下面是实现所有这些更改的工作示例:
jQuery($ => {
let maxRows = 7;
let rowTemplate = $('#row-template').html();
let $container = $('#dynamic_field');
$('#add').on('click', () => {
let rowCount = $('.row').length;
if (rowCount >= maxRows)
return;
let $row = $(rowTemplate).appendTo($container);
$row.find('span').text(rowCount += 2);
$('.btn-remove').removeClass('hidden');
});
$(document).on('click', '.btn-remove', () => $('.row:last').remove());
});
.hidden {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" id="add" class="btn-add">Add Another Number</button>
<button type="button" class="btn-remove hidden">Remove last</button>
<div id="dynamic_field"></div>
<template id="row-template">
<div class="row">
<label>
Number <span></span>
<input type="text" name="number[]" value="" />
</label>
</div>
</template>
评论
0赞
Bill
9/1/2022
谢谢你的解决方案。由于默认字段,这可能是吹毛求疵。为以“2”开头的添加字段提供数字更有意义(默认值假定为 1、添加 2、添加 3 等。再次感谢。
0赞
Rory McCrossan
9/1/2022
当然,我错过了。通过向 length 属性添加 2 进行编辑以进行更正
1赞
Bill
9/1/2022
我对你感激不尽。这个解决方案是完美的。先生,你是金神!
评论
Number 2
id