У меня есть функция клонирования / удаления в div и его элементах. Эта часть работает нормально, но у меня есть кнопка сгенерировать код, и мне нужно вывести содержимое вновь клонированных элементов, когда они будут сгенерированы.
На данный момент у меня есть текущий javascript для вывода исходных элементов div на страницу, но мне интересно, есть ли способ добавления вывода на лету в зависимости от того, был ли div клонирован или удален.
var cloneIndex = $(".clonedInput").length;
function clone() {
$(this).parents(".clonedInput").clone()
.appendTo("body")
.attr("id", "clonedInput" + cloneIndex)
.on('click', 'button.clone', clone)
.on('click', 'button.remove', remove);
cloneIndex++;
}
function remove() {
$(this).parents(".clonedInput").remove();
}
$("button.clone").on("click", clone);
$("button.remove").on("click", remove);
/*generate the code*/
function myFunction() {
var quote = '"';
var mobile_start = "<pre><div class = " + quote + "show-for-small-only" + quote + "></pre>";
var inner_style = "<pre><hr style = " + quote + "color:#EEECE8; margin-left: 5px; margin-right: 5px;" + quote + "/></pre>";
var mobile_title = document.getElementById("title_text").value;
var headline = "<pre><p class = " + quote + "text-center" + quote + " style = " + quote + "background-color:" + document.getElementById("name_text").value + "; color: white; font-size:45px; font-family:din-bold; padding-top:15px; padding-bottom: 10px;" + quote + "></pre>" + mobile_title + "<pre></p></pre>";
var mobile_end = "<pre></div></pre>";
document.getElementById("top").innerHTML = mobile_start + inner_style + mobile_title + headline + mobile_end + "<br /><br />";
}body {
padding: 10px;
}
.clonedInput {
width: 50%;
padding: 10px;
border-radius: 5px;
background-color: #def;
margin-bottom: 10px;
}
.clonedInput div {
margin: 5px;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id = "clonedInput" class = "clonedInput">
<div>
<fieldset>
<legend>Product </legend>
<label for = "name">Title:</label>
<input type = "text" id = "title_text" />
<label for = "mail">Product Name:</label>
<input type = "text" id = "name_text" />
</fieldset>
</div>
<div class = "actions">
<button class = "clone">Clone</button>
<button class = "remove">Remove</button>
</div>
</div>
<button onClick = "myFunction()">Generate Code</button>
<p id = "top" style = "font-family:Arial; font-size: 18px;"></p>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте имена классов вместо идентификаторов для полей. Когда вы генерируете вывод, пропустите каждый clonedInput и выберите поля в их дочерних элементах, например:
function myFunction() {
var code = "";
$(".clonedInput").each(function() {
var title=$(this).find(".title_text").val(),
productName=$(this).find(".name_text").val();
code += ....... //append the code for each element
});
$("#top").html(code);
}
Совет: используйте правильные описательные имена для ваших функций, переменных и имен элементов.
Большое спасибо, Габриэль.
Пожалуйста, пометьте его как решение, если оно было полезным. Спасибо.
трудно понять вопрос. Также не рекомендуется смешивать ненавязчивые прослушиватели событий (например, ваши jQuery) и встроенные. Выберите один подход и будьте последовательны