Select2 и Datetimepicker не работают в клонированном div

Я клонирую div с jquery, который содержит textarea, select2 и datatimepicker. Но клонированный select2 и datetimepicker не работают.

<div id= "myDiv">
    <textarea id = "myTextArea"></textarea>
    <select class = "mySelect2">
       <option value = "1">1</option>
       <option value = "2">1</option>
    </select>
    <div class = "date date-picker" data-date-format = "dd.mm.yyyy">
        <input type = "text" readonly></div>
    </div>
</div>

Я также добавил $('.date-picker').datepicker(); и $(".mySelect2").select2(); в свой код javascript.

function create() {
    $("#myDiv  div:first").clone().find("textarea select input").each(function () {
        $(this).val('');
    }).end().appendTo("#myDiv");
}

вам нужно их инициализировать

Pranav C Balan 10.04.2019 18:28

Я использовал jQuery(document).ready(function () {$('.date-picker').datepicker(); $(".mySelect2").select2();})

redoubtable 10.04.2019 18:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
375
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны повторно инициализировать элементы после их клонирования. Итак, в функции создания добавьте две строки ниже

function create() {
    $("#myDiv  div:first").clone().find("textarea select input").each(function () {
        $(this).val('');
    }).end().appendTo("#myDiv");

    $('.date-picker').datepicker(); 
    $(".mySelect2").select2();
}

Спасибо, сработало, но с datetimepicker и с select2 тоже, но select2 дублируется. Первый не работает, второй работает нормально. Я должен удалить первый.

redoubtable 10.04.2019 18:44

Можно ли сделать select2 без дублирующего клона?

redoubtable 11.04.2019 12:03

Вы можете либо не добавлять класс при загрузке исходного HTML-кода, либо в своей функции создания сделать вызов destroy для удаления предыдущего $('#mySelect2').select2('destroy');

ullfindsmit 11.04.2019 15:50

Вам необходимо инициализировать эти плагины для вновь добавленных элементов, поскольку этих элементов не было (в DOM) при инициализации (в обработчике готовности документа).

function create() {
    // cache the element reference
    let $ele = $("#myDiv  div:first").clone().find("textarea select input").each(function () {
        $(this).val('');
    }).end().appendTo("#myDiv");

    // get select and input element and initialize corresponding plugin
    $ele.filter('.date-picker').datepicker(); 
    $ele.filter(".mySelect2").select2();
}

Другие вопросы по теме