#javascript #html #jquery
Вопрос:
Я не могу получить функцию выбора даты всякий раз , когда создается новое поле, пожалуйста, какие настройки необходимы для исправления этого ?
У меня нет знаний о javascript, в настоящее время я создаю это на flask
в основном я пытаюсь получить следующее : при нажатии на кнопку добавить новую позицию создается новое поле , я хочу, чтобы это поле функционировало точно так же, как работает начальное поле (т. Е. должны отображаться средства выбора даты).
$(document).ready(function() {
var max_input_fields = 10;
var add_input = $('.add-input');
var input_wrapper = $('.input-wrapper');
var new_input = '<div class="col-lg-12 "><br><div class="col-md-12 select-pane "><label class="labels">Department</label><select
class="form-control -sm h-50 w-100 " name="department" aria-label="Select Filter">
<option>finace</option><option>music</option></select></div><div class="col-md-12"><label class="labels">Position Held
</label><input type="text" class="form-control" placeholder="enter Position" name="positions"></div>
<div class="col-lg-12"><label class="labels">From</label><input type="text" name="From" id="From" class="form-control"
placeholder="From Date" /></div><div class="col-lg-12"><label class="labels">To</label><input type="text" name="to"
id="to" class="form-control" placeholder="To Date" /></div><a href="javascript:void(0);" class="col-lg-12 remove-input" title="Remove input"><button type="button" name="position_button">Remove</button></a></div>';
var add_input_count = 1;
$(add_input).click(function() {
if (add_input_count < max_input_fields) {
add_input_count ;
$(input_wrapper).append(new_input);
}
});
$(input_wrapper).on('click', '.remove-input', function(e) {
e.preventDefault();
$(this).parent('div').remove();
add_input_count--;
});
});
$(document).ready(function() {
$.datepicker.setDefaults({
dateFormat: 'yy-mm-dd'
});
$(function() {
$("#From").datepicker();
$("#to").datepicker();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="input-wrapper">
<div class="p-3 py-5">
<div class="d-flex justify-content-between align-items-center experience">
<div class="col-lg-12 ">
<h5>Add Previous Positions Held</h5>
<br>
<div class="col-md-12 select-pane "><label class="labels">Department</label>
<select class="form-control -sm h-50 w-100 " name="department" aria-label="Select Filter">
<option>finace</option>
<option>music</option>
</select>
</div>
<div class="col-md-12"><label class="labels">Position Held</label><input type="text" class="form-control" placeholder="enter Position" name="positions"></div>
<div class="col-lg-12">
<label class="labels">From</label>
<input type="text" name="From" id="From" class="form-control" placeholder="From Date" />
</div>
<div class="col-lg-12">
<label class="labels">To</label>
<input type="text" name="to" id="to" class="form-control" placeholder="To Date" />
<br>
<a href="javascript:void(0);" class="col-lg-12 add-input" title="Add input"><button type="button" name="position_button">Add more positions</button></a>
</div>
</div>
</div>
</div>
</div>
Ответ №1:
Идентификаторы в html должны быть уникальными, если вы хотите, чтобы несколько уникальных элементов не использовали класс.
Ниже приведено потенциальное решение, реализованное путем изменения идентификатора новых входных блоков.
var id_index = 2; //Id for from and to
$(document).ready(function() {
var max_input_fields = 10;
var add_input = $('.add-input');
var input_wrapper = $('.input-wrapper');
var add_input_count = 1;
$(add_input).click(function() {
if (add_input_count < max_input_fields) {
//Moved so that the from and two id can change
var new_input = '<div class="col-lg-12"><br><div class="col-md-12 select-pane "><label class="labels">Department</label><select
class="form-control -sm h-50 w-100 " name="department" aria-label="Select Filter">
<option>finace</option><option>music</option></select></div><div class="col-md-12"><label class="labels">Position Held
</label><input type="text" class="form-control" placeholder="enter Position" name="positions"></div>
<div class="col-lg-12"><label class="labels">From</label><input type="text" name="From" id="From' id_index '" class="form-control"
placeholder="From Date" /></div><div class="col-lg-12"><label class="labels">To</label><input type="text" name="to"
id="to' id_index '" class="form-control" placeholder="To Date" /></div><a href="javascript:void(0);" class="col-lg-12 remove-input" title="Remove input"><button type="button" name="position_button">Remove</button></a></div>';
add_input_count ;
$(input_wrapper).append(new_input);
$("#From" id_index).datepicker(); //Apply datetime
$("#to" id_index).datepicker();
id_index ; //Increment id
}
});
$(input_wrapper).on('click', '.remove-input', function(e) {
e.preventDefault();
$(this).parent('div').remove();
add_input_count--;
});
//Removed $(document).ready as its redundant
$.datepicker.setDefaults({
dateFormat: 'yy-mm-dd'
});
$("#From").datepicker();
$("#to").datepicker();
});
Комментарии:
1. хорошо отметил , что это сработало отлично, большое спасибо
Ответ №2:
$(document).ready(function() {
var max_input_fields = 10;
var add_input = $('.add-input');
var input_wrapper = $('.input-wrapper');
var new_input = '<div class="col-lg-12 "><br><div class="col-md-12 select-pane "><label class="labels">Department</label><select
class="form-control -sm h-50 w-100 " name="department" aria-label="Select Filter">
<option>finace</option><option>music</option></select></div><div class="col-md-12"><label class="labels">Position Held
</label><input type="text" class="form-control" placeholder="enter Position" name="positions"></div>
<div class="col-lg-12"><label class="labels">From</label><input type="text" name="From" class="form-control datepicker"
placeholder="From Date" /></div><div class="col-lg-12"><label class="labels">To</label><input type="text" name="to"
class="form-control datepicker" placeholder="To Date" /></div><a href="javascript:void(0);" class="col-lg-12 remove-input" title="Remove input"><button type="button" name="position_button">Remove</button></a></div>';
var add_input_count = 1;
$(add_input).click(function() {
if (add_input_count < max_input_fields) {
add_input_count ;
$(input_wrapper).append(new_input);
}
});
$(input_wrapper).on('click', '.remove-input', function(e) {
e.preventDefault();
$(this).parent('div').remove();
add_input_count--;
});
});
$(document).ready(function() {
$.datepicker.setDefaults({
dateFormat: 'yy-mm-dd'
});
$(function() {
$(document).on('click', '.datepicker', function(event){
$(event.target).datepicker().datepicker("show");
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="input-wrapper">
<div class="p-3 py-5">
<div class="d-flex justify-content-between align-items-center experience">
<div class="col-lg-12 ">
<h5>Add Previous Positions Held</h5>
<br>
<div class="col-md-12 select-pane "><label class="labels">Department</label>
<select class="form-control -sm h-50 w-100 " name="department" aria-label="Select Filter">
<option>finace</option>
<option>music</option>
</select>
</div>
<div class="col-md-12"><label class="labels">Position Held</label><input type="text" class="form-control" placeholder="enter Position" name="positions"></div>
<div class="col-lg-12">
<label class="labels">From</label>
<input type="text" name="From" class="form-control datepicker" placeholder="From Date" />
</div>
<div class="col-lg-12">
<label class="labels">To</label>
<input type="text" name="to" class="form-control datepicker" placeholder="To Date" />
<br>
<a href="javascript:void(0);" class="col-lg-12 add-input" title="Add input"><button type="button" name="position_button">Add more positions</button></a>
</div>
</div>
</div>
</div>
</div>
Вы не можете повторно использовать один и тот же идентификатор в html-документе. Поэтому я удалил id=»From» и id=»to» из html
Поскольку вы создаете динамический элемент, jQuery его не распознает. Таким образом, щелчок фиксируется на уровне документа, и datepicker присваивается элементу, у которого есть «datepicker» в качестве класса. Вы можете найти имя класса, добавленное как class=»datepicker» в полях » От » и » до » ввода