У меня есть эта программа, которая может динамически создавать закрывающиеся элементы. Когда пользователь нажимает на созданный закрывающийся элемент, в его содержимом отображаются поле ввода и кнопка. Затем пользователь может ввести текст в текстовое поле, а затем нажать кнопку. Затем текст пользователей будет отображаться в выбранном закрывающемся контенте.
Все работает, отлично, за исключением случаев, когда я пытаюсь отобразить ввод пользователей в выбранном содержимом закрываемых элементов.
Вот что происходит:
Когда пользователь вводит что-то в текстовое поле, оно добавляется к закрывающемуся содержимому:
Текст отображается только в закрывающемся содержимом после того, как я закрою выбранный закрывающийся:
Почему ввод пользователя не отображается в выбранном закрывающемся элементе после того, как я нажму кнопку добавления задачи?
Вот мой полный код:
var currentClosable;
var currentContent;
function selectedColl(){
document.getElementById("inputTaskDiv").style.display = "block";
currentClosable = event.target;
currentContent = currentClosable.nextElementSibling;
var inputTaskDiv = document.getElementById("inputTaskDiv");
currentContent.append(inputTaskDiv);
}
var taskCounter = 0;
function addTask() {
var text = document.getElementById("taskInput").value;
// create a new div element and give it a unique id
var newTask = $("<input type='checkbox'><label>"+ text + "</label><br>");
newTask.id = 'temp' + taskCounter;
taskCounter++
// and give it some content
var newContent = document.createTextNode(text);
$(currentContent).append(newTask); //Why isn't it being displayed??
console.info("appended");
}
var elementCounter = 0;
var elementCounterContent = 0;
var text;
function addElement() {
text = document.getElementById("input").value;
// create a new div element and give it a unique id
var newDiv = $("<button class='collapsible' onclick='selectedColl()'></button>").text(text);
var newContentOfDiv = $("<div class='content'></div>");
newDiv.id = 'temp' + elementCounter;
newContentOfDiv.id = 'content' + elementCounterContent;
newDiv.classList = "div";
elementCounter++
elementCounterContent++
// and give it some content
var newContent = document.createTextNode(text);
// add the newly created element and its content into the DOM
document.getElementById("input").value = " ";
$("body").append(newDiv, newContentOfDiv);
newDiv.click(function() {
this.classList.toggle("active");
content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
});
}.collapsible {
background-color: #777;
color: white;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
}
.active, .collapsible:hover {
background-color: #555;
}
.collapsible:after {
content: '\002B';
color: white;
font-weight: bold;
float: right;
margin-left: 5px;
}
.active:after {
content: "\2212";
}
.content {
padding: 0 18px;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
background-color: #f1f1f1;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<input id = "input" type = "text"><button onclick = "addElement()">Add</button>
<div id = "inputTaskDiv" style = "display:none">
<input id = "taskInput" type = "text"><button onclick = "addTask()">Add Task</button>
</div>Да, это действительно про CSS, overflow: hidden надо убрать
@DhavalMarthak Я попробовал оба ваших предложения, удаление max-height ничего не изменило для меня ... затем я также попытался удалить переполнение: скрыто, но когда я закрываю последний созданный закрывающийся элемент, содержимое не убирается вместе с закрывающимся ...
@SaymoinSam Я пытался удалить переполнение: скрыто, но когда я закрываю последний созданный закрывающийся элемент, содержимое не убирается вместе с закрывающимся
Несмотря на это, спасибо за вашу помощь, я постараюсь выяснить, как это работает с вашими предложениями!



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


Внесены изменения в CSS и JS.
В CSS вы можете увидеть, какие строки прокомментированы в стиле «.content»: max-height и overflow
Изменение в JS:
Я изменился content.style.maxHeight с этим content.style.display
this.classList.toggle("active");
content = this.nextElementSibling;
if (content.style.display === 'block') {
content.style.display = 'none';
} else {
content.style.display = 'block';
}
Пример:
var currentClosable;
var currentContent;
function selectedColl() {
document.getElementById("inputTaskDiv").style.display = "block";
currentClosable = event.target;
currentContent = currentClosable.nextElementSibling;
var inputTaskDiv = document.getElementById("inputTaskDiv");
currentContent.append(inputTaskDiv);
}
var taskCounter = 0;
function addTask() {
var text = document.getElementById("taskInput").value;
// create a new div element and give it a unique id
var newTask = $("<input type='checkbox'><label>" + text + "</label><br>");
newTask.id = 'temp' + taskCounter;
taskCounter++
// and give it some content
var newContent = document.createTextNode(text);
$(currentContent).append(newTask); //Why isn't it being displayed??
console.info("appended");
}
var elementCounter = 0;
var elementCounterContent = 0;
var text;
function addElement() {
text = document.getElementById("input").value;
// create a new div element and give it a unique id
var newDiv = $("<button class='collapsible' onclick='selectedColl()'></button>").text(text);
var newContentOfDiv = $("<div class='content'></div>");
newDiv.id = 'temp' + elementCounter;
newContentOfDiv.id = 'content' + elementCounterContent;
newDiv.classList = "div";
elementCounter++
elementCounterContent++
// and give it some content
var newContent = document.createTextNode(text);
// add the newly created element and its content into the DOM
document.getElementById("input").value = " ";
$("body").append(newDiv, newContentOfDiv);
newDiv.click(function () {
this.classList.toggle("active");
content = this.nextElementSibling;
if (content.style.display === 'block') {
content.style.display = 'none';
} else {
content.style.display = 'block';
}
});
}.collapsible {
background-color: #777;
color: white;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
}
.active,
.collapsible:hover {
background-color: #555;
}
.collapsible:after {
content: '\002B';
color: white;
font-weight: bold;
float: right;
margin-left: 5px;
}
.active:after {
content: "\2212";
}
.content {
padding: 0 18px;
/* max-height: 0; */
/* overflow: hidden; */
transition: max-height 0.2s ease-out;
background-color: #f1f1f1;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<input id = "input" type = "text"><button onclick = "addElement()">Add</button>
<div id = "inputTaskDiv" style = "display:none">
<input id = "taskInput" type = "text"><button onclick = "addTask()">Add Task</button>
</div>
У тебя проблема с css а не со скриптом! проблема с
max-height. если вы опустите эту часть, она будет работать!