#javascript #html #jquery
#javascript #HTML #jquery
Вопрос:
При нажатии кнопки addField_1 я должен клонировать div контейнера (id = ‘projection’) и добавить его прямо под ним.
Я делаю это следующим jquery
образом:
$('[id^="addField"]').click(() => {
var containerDiv = $(this).parent();
console.log(containerDiv.attr('id'));
containerDiv.after(containerDiv.clone());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row" id="projection" >
<select class="form-control" aria-placeholder="Select field"></select>
<button type="button" class="btn btn-light" id="addField_1" name="mybutton"> </button>
</div>
При нажатии кнопки ошибки нет. Но div не копируется. Я также попытался зарегистрировать идентификатор родительского div. Он также не определен. Пожалуйста, скажите мне, что я делаю не так.
Комментарии:
1.
addField
естьaddField_1
?2. При попытке нет ошибки, и она работает при первом щелчке, но обратите внимание, что все события щелчка по клонированному содержимому не будут работать из-за того, что новые элементы не привязаны к событию щелчка. Итак, вы могли бы попробовать с
$('.row').on('click','[id^="addField"]',() => {})
3. @SimoneRossaini
$('[id^="addField"]')
означает «выбрать любой элемент, который имеет атрибут ‘id’, начинающийся с ‘addField’4. Нет, это «начинается с addField». Для этого я использовал знак карата.
5. @DevsiOdedra событие щелчка запускается всеми
id
, начиная сaddField
. Его код правильный
Ответ №1:
Обратите внимание, что вы использовали функцию arrow, из-за которой this
ссылаются на window
.
Для этого есть два решения :
1. Использование event.target
функции стрелки для получения целевого элемента.
$('[id^="addField"]').click((event) => {
let containerDiv = $(event.target).parent();
console.log(containerDiv.attr('id'));
containerDiv.after(containerDiv.clone());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row" id="projection" >
<select class="form-control" aria-placeholder="Select field"></select>
<button type="button" class="btn btn-light" id="addField_1" name="mybutton"> </button>
</div>
2. Не использовать функцию со стрелкой, а анонимную функцию и использовать this
:
$('[id^="addField"]').click(function() {
let containerDiv = $(this).parent();
console.log(containerDiv.attr('id'));
containerDiv.after(containerDiv.clone());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row" id="projection" >
<select class="form-control" aria-placeholder="Select field"></select>
<button type="button" class="btn btn-light" id="addField_1" name="mybutton"> </button>
</div>
Ответ №2:
С помощью этого ключевого слова вы будете ссылаться на объект Window .
Вот почему вы должны использовать что-то подобное:
$('[id^="addField"]').on('click', event => {
const parentDiv = $(event.target).closest('.row');
console.log(parentDiv.html());
});