javascript - jQuery 多日期生成
问题描述
我有开始日期和结束日期的简单表格。我想实现这一点,当我选择开始日期时,将自动生成结束日期(+3 个月)。问题是我有一个绿色按钮,它会生成另外几个日期输入。我需要该脚本来处理动态生成的输入,它们具有相同的类和名称,但可以具有不同的值。因为现在它适用于第一个输入,并且不适用于下一个可以有不同开始日期的人,所以它会自动有另一个结束日期。
$('#skaicius').val(2);
$(document).ready(function() {
$('#duomenys').submit(function() {
$('#skaicius').val($('.fieldGroup').length * 1 + 1);
})
//papildomu pareigu limitas
var maxGroup = 10;
//$('#skaicius').val(2);
//papildomu pareigu pridejimas
$(".prideti").click(function() {
if ($('body').find('.fieldGroup').length < maxGroup) {
var fieldHTML = '<div class="row form-group fieldGroup">' + $(".fieldGroupCopy").html() + '</div>';
$('body').find('.fieldGroup:last').after(fieldHTML);
} else {
alert('Viršintas didžiausias papildomų pareigų skaičius.');
}
});
//papildomu pareigu salinimas
$("body").on("click", ".salinti", function() {
$(this).parents(".fieldGroup").remove();
});
// Generates start and end date
$(document).ready(function() {
$('.darbo_pradzia').change(function() {
let date = new Date($(this).val());
let newDate = new Date(date.setMonth(date.getMonth() + 3));
var day = ("0" + newDate.getDate()).slice(-2);
var month = ("0" + (newDate.getMonth() + 1)).slice(-2);
var formatted = newDate.getFullYear() + "-" + (month) + "-" + (day);
$('.bandomasis_laikotarpis').val(formatted);
});
});
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://kit.fontawesome.com/04b00d367c.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<div class="container">
<div class="row form-group fieldGroup">
<h4>Darbuotojo pareigos</h4>
<div style="position: relative; top: 8px; left: 10px;"><a href="javascript:void(0)" class="tbtn-print btn-sm btn-success prideti" title="[Pridėti pareigas]"><span class="fas fa-plus"></span></a></div>
<div class="col-md-12">
<label class="text-black" for="dpradzia">Darbo pradžia</label>
<input type="date" name="darbo_pradzia[]" class="form-control darbo_pradzia">
</div>
<div class="col-md-12">
<label class="text-black" for="bandomasis_laikotarpis">Bandomasis laikotarpis</label>
<input type="date" name="bandomasis_laikotarpis[]" class="form-control bandomasis_laikotarpis">
</div>
</div>
<!-- Papildomos pareigos -->
<div class="row form-group fieldGroupCopy" style="display: none;">
<h4>Papildomos pareigos</h4>
<div style="position: relative; top: 8px; left: 10px;"><a href="javascript:void(0)" class="tbtn-print btn-sm btn-danger salinti" title="[Šalinti]"><span class="fas fa-minus"></span></a></div>
<div class="col-md-12">
<label class="text-black" for="dpradzia">Darbo pradžia</label>
<input type="date" name="darbo_pradzia[]" class="form-control darbo_pradzia">
</div>
<div class="col-md-12">
<label class="text-black" for="bandomasis_laikotarpis">Bandomasis laikotarpis</label>
<input type="date" name="bandomasis_laikotarpis[]" class="form-control bandomasis_laikotarpis">
</div>
</div>
<!-- Papildomos pareigos pabaiga -->
</div>
解决方案
几点说明:
- 不要放几个“
$(document).ready
” - 使用 '
clone
' 来复制你的元素,使用 "true, true
" 来绑定事件 - 使用 DOM 树查找要修改的元素。
$('#skaicius').val(2);
$(document).ready(function() {
$('.darbo_pradzia').on('change', function() {
var elt = $(this)
let date = new Date(elt.val());
let newDate = new Date(date.setMonth(date.getMonth() + 3));
var day = ("0" + newDate.getDate()).slice(-2);
var month = ("0" + (newDate.getMonth() + 1)).slice(-2);
var formatted = newDate.getFullYear() + "-" + (month) + "-" + (day);
elt.closest('.form-group').find('.bandomasis_laikotarpis').val(formatted);
});
$('#duomenys').submit(function() {
$('#skaicius').val($('.fieldGroup').length * 1 + 1);
})
//papildomu pareigu limitas
var maxGroup = 10;
//$('#skaicius').val(2);
//papildomu pareigu pridejimas
$(".prideti").click(function() {
if ($('body').find('.fieldGroup').length < maxGroup) {
$('#fieldGroupCopy').clone(true, true).appendTo('#container').show()
} else {
alert('Viršintas didžiausias papildomų pareigų skaičius.');
}
});
//papildomu pareigu salinimas
$("body").on("click", ".salinti", function() {
$(this).parents(".fieldGroup").remove();
});
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://kit.fontawesome.com/04b00d367c.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<div class="container" id="container">
<div class="row form-group fieldGroup">
<h4>Darbuotojo pareigos</h4>
<div style="position: relative; top: 8px; left: 10px;"><a href="javascript:void(0)" class="tbtn-print btn-sm btn-success prideti" title="[Pridėti pareigas]"><span class="fas fa-plus"></span></a></div>
<div class="col-md-12">
<label class="text-black" for="dpradzia">Darbo pradžia</label>
<input type="date" name="darbo_pradzia[]" class="form-control darbo_pradzia">
</div>
<div class="col-md-12">
<label class="text-black" for="bandomasis_laikotarpis">Bandomasis laikotarpis</label>
<input type="date" name="bandomasis_laikotarpis[]" class="form-control bandomasis_laikotarpis">
</div>
</div>
<!-- Papildomos pareigos -->
<div class="row form-group" id="fieldGroupCopy" style="display: none;">
<h4>Papildomos pareigos</h4>
<div style="position: relative; top: 8px; left: 10px;"><a href="javascript:void(0)" class="tbtn-print btn-sm btn-danger salinti" title="[Šalinti]"><span class="fas fa-minus"></span></a></div>
<div class="col-md-12">
<label class="text-black" for="dpradzia">Darbo pradžia</label>
<input type="date" name="darbo_pradzia[]" class="form-control darbo_pradzia">
</div>
<div class="col-md-12">
<label class="text-black" for="bandomasis_laikotarpis">Bandomasis laikotarpis</label>
<input type="date" name="bandomasis_laikotarpis[]" class="form-control bandomasis_laikotarpis">
</div>
</div>
<!-- Papildomos pareigos pabaiga -->
</div>
推荐阅读
- arrays - 使用 useReducer 将对象添加到数组内的数组
- python - discord.py 中的关键字
- javascript - 如何在javascript中将数据json存储到cookie中
- angular - 如何在 StoryBook 和 Angular 测试中设置 NGRX 商店的状态?
- pytorch - 找不到高效的pytorch广播
- javascript - 如何在php中生成灵活数量的选项卡?
- typescript - 在带有 typegoose 的 mongoose virtuals 中这个“this”的无法识别的属性
- sql - 将数据从一个表添加到另一个表
- html - 展开相对高度绝对适合儿童身高
- java - 基于堆的优先级队列实现