@ivansimonov1984

Как правильно клонировать input[type=radio]?

Объясните, почему не происходит клонирование input[type=radio], с соот. изменением name?
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Хотите, чтобы суффиксы у атрибутов name были правильные - оператор + вам в помощь, добавляйте сколько надо.

Хотите, чтобы клонирование происходило не только по клику на кнопку, что существует изначально, но и по новым - клонируйте элементы вместе с обработчиками событий или делегируйте обработку клика контейнеру.

// исправляем ваш код
$('.add-attr').on('click', function() {
  const index = $('.radios').length + 1;

  const $lastRow = $(this).closest('.container').find('.item').last();
  const $newRow = $lastRow.clone(true).insertAfter($lastRow);

  $newRow.find('input[type="radio"]').prop('name', 'name-' + index);
});

// или переписываем его без использования jquery
document.querySelector('.container').addEventListener('click', e => {
  if (e.target.classList.contains('add-attr')) {
    const row = e.currentTarget.firstElementChild.cloneNode(true);
    const name = `name-${e.currentTarget.children.length + 1}`;
    e.currentTarget.appendChild(row);
    row.querySelectorAll('[type="radio"]').forEach(n => n.name = name);
  }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы