Как сохранить сообщение и запустить вашу функцию снова, не удаляя ваши данные

#javascript

Вопрос:

Я постараюсь быть как можно более точным, я делаю это для создания поста, и в основном пользователь вводит свое имя пользователя и все, что он хочет сказать в #addPost, и это «публикуется» в #mainBody. Теперь, когда это работает, я хочу иметь возможность создать еще один пост, не удаляя свой старый пост. Я хочу, чтобы это просто пошло ко дну.

 let add = document.getElementById("addPost") let usrInp = document.getElementById("username__input") let pstInp = document.getElementById("post__input") let usr = document.getElementById("username__post") let pst = document.getElementById("post__published") let post__body = document.getElementById("mainBody") let post = document.getElementById("post")   function Post(){  let pstInpStr = pstInp.value  let usrInpStr = usrInp.value    if (usrInpStr == "" || pstInpStr == ""){  alert("Empty Field")  return false  }    usr.innerHTML = usrInp.value  pst.innerHTML = pstInp.value  post__body.style.border = "1px solid lightgray"  post__body.style.borderRadius = "10px"   if (usrInpStr.length gt; 0 amp;amp; pstInpStr.length gt; 0){  usrInp.value = ""  pstInp.value = ""  post.style.background = "rgb(37, 202, 31)"  post.innerHTML = "Posted ✔️"  } } 
 lt;div id="addPost"gt;  lt;div class="title"gt;Create new post  lt;i class="fas fa-times" onclick="showPost()" style="color: rgb(227, 69, 41);;"gt;lt;/igt;  lt;/divgt;  lt;div class="name"gt;  lt;input type="Name__Post" placeholder="Username" id="username__input" requiredgt;  lt;/divgt;  lt;div class="post"gt;  lt;textarea placeholder="What's on your mind?" id="post__input"gt;lt;/textareagt;  lt;/divgt;  lt;divgt;   lt;button type="submit" onclick="Post()" id="post"gt;Postlt;/buttongt;  lt;/divgt;  lt;/divgt;  lt;div id="mainBody"gt;  lt;div class="username"gt;  lt;span id="username__post"gt;lt;/spangt;  lt;/divgt;  lt;div class="date"gt;lt;/divgt;  lt;div class="post"gt;  lt;p id="post__published"gt;lt;/pgt;  lt;/divgt;  lt;/divgt; 

Комментарии:

1. Не нацеливайтесь на определенный элемент в организме. Извлеките вводимые пользователем данные, а затем создайте новые элементы, которые будут их содержать. Поместите эти элементы в div или любой другой костюм, а затем добавьте этот элемент в тело.

2. Привет, Киро, посмотри ответ ниже. Дайте мне знать, если вам понадобится дополнительная помощь. мир вне

Ответ №1:

 let add = document.getElementById("addPost")  let usrInp = document.getElementById("username__input")  let pstInp = document.getElementById("post__input")  let usr = document.getElementById("username__post")  let pst = document.getElementById("post__published")  let post__body = document.getElementById("mainBody")  let post = document.getElementById("post")    function Post(){  let pstInpStr = pstInp.value  let usrInpStr = usrInp.value    if (usrInpStr == "" || pstInpStr == ""){  alert("Empty Field")  return false  }    // usr.innerHTML = usrInp.value  // pst.innerHTML = pstInp.value   let htmll = `lt;div style = "border: 1px solid lightgray; border-radius: 10px; margin-bottom:10px; padding:20px;"gt;  lt;divgt; lt;spangt;`  usrInp.value  `lt;/spangt; lt;/divgt;  lt;div class="date"gt;lt;/divgt;  lt;div class="post"gt;lt;pgt;`  pstInp.value  `lt;/pgt;lt;/divgt;  lt;/divgt;`;   post__body.innerHTML  = htmll;   // post__body.style.border = "1px solid lightgray"  // post__body.style.borderRadius = "10px"   if (usrInpStr.length gt; 0 amp;amp; pstInpStr.length gt; 0){  usrInp.value = ""  pstInp.value = ""  post.style.background = "rgb(37, 202, 31)"  post.innerHTML = "Posted ✔️"  }  } 
 lt;div id="addPost"gt;  lt;div class="title"gt;Create new post  lt;i class="fas fa-times" onclick="showPost()" style="color: rgb(227, 69, 41);;"gt;lt;/igt;  lt;/divgt;  lt;div class="name"gt;  lt;input type="Name__Post" placeholder="Username" id="username__input" requiredgt;  lt;/divgt;  lt;div class="post"gt;  lt;textarea placeholder="What's on your mind?" id="post__input"gt;lt;/textareagt;  lt;/divgt;  lt;divgt;   lt;button type="submit" onclick="Post()" id="post"gt;Postlt;/buttongt;  lt;/divgt; lt;/divgt; lt;div id="mainBody"gt;  lt;/divgt; 

Комментарии:

1. Но еще один вопрос, разные сообщения добавляются в одно и то же поле, как мне добавить поле с другим текстом? Как будто у каждого поста есть свой ящик?

2. Хорошо, позвольте мне обновить код для вас, а затем дайте мне знать, что вы хотите что-то подобное.

3. @kiro — код, который я предоставил, уже делает это. Каждый триплет комментариев/имени пользователя/даты находится внутри div с классом userComment . Элементы с этим стилем имеют границу и некоторые отступы под ними, чтобы поля для комментариев не соприкасались друг с другом.

4. @kiro Я обновил код, проверьте его. Теперь они находятся в отдельных коробках. Вы можете настроить дальнейший CSS по своему усмотрению. Спасибо

5. Эй, чувак, ответь на вопрос, один из дивов, которые я создал в js. скажем, опубликуйте тот, на который я хочу нацелиться в документе js. как мне это сделать? потому что он не идентифицирован в js и не является частью переменной.

Ответ №2:

Вы можете добавлять новые значения в контейнер (#myList) после каждой отправки.

 let add = document.getElementById("addPost") let usrInp = document.getElementById("username__input") let pstInp = document.getElementById("post__input") let usr = document.getElementById("username__post") let pst = document.getElementById("post__published") let post__body = document.getElementById("mainBody") let post = document.getElementById("post")   function Post(){  let pstInpStr = pstInp.value  let usrInpStr = usrInp.value    if (usrInpStr == "" || pstInpStr == ""){  alert("Empty Field")  return false  }    // usr.innerHTML = usrInp.value  // pst.innerHTML = pstInp.value  // this lines   var node = document.createElement("LI");  var textnode = document.createTextNode(usrInp.value   ' - ');  var textnode2 = document.createTextNode(pstInp.value);   node.appendChild(textnode);  node.appendChild(textnode2);  document.getElementById("myList").appendChild(node);  //    // --  post__body.style.border = "1px solid lightgray"  post__body.style.borderRadius = "10px"   if (usrInpStr.length gt; 0 amp;amp; pstInpStr.length gt; 0){  usrInp.value = ""  pstInp.value = ""  post.style.background = "rgb(37, 202, 31)"  post.innerHTML = "Posted ✔️"  } } 
 lt;div id="addPost"gt;  lt;div class="title"gt;Create new post  lt;i class="fas fa-times" onclick="showPost()" style="color: rgb(227, 69, 41);;"gt;lt;/igt;  lt;/divgt;  lt;div class="name"gt;  lt;input type="Name__Post" placeholder="Username" id="username__input" requiredgt;  lt;/divgt;  lt;div class="post"gt;  lt;textarea placeholder="What's on your mind?" id="post__input"gt;lt;/textareagt;  lt;/divgt;  lt;divgt;   lt;button type="submit" onclick="Post()" id="post"gt;Postlt;/buttongt;  lt;/divgt;  lt;/divgt;  lt;div id="mainBody"gt;  lt;div class="username"gt;  lt;span id="username__post"gt;lt;/spangt;  lt;/divgt;  lt;div class="date"gt;lt;/divgt;  lt;div class="post"gt;  lt;p id="post__published"gt;lt;/pgt;  lt;/divgt;  lt;/divgt; lt;!-- this line --gt;  lt;ul id="myList"gt;lt;/ulgt; 

Ответ №3:

Вот пример того, к чему я клонил в своем предыдущем комментарии.

Обратите внимание на этот template элемент. Это позволяет очень легко и легко читать спецификацию контента, который будет добавляться динамически. Вместо набора document.createElemnt someElement.appendChild вызовов и мы просто дублируем содержимое шаблона, а затем заполняем его перед добавлением в тело.

Проверка ошибок удалена для краткости.

 lt;!doctype htmlgt; lt;htmlgt; lt;headgt; lt;scriptgt; "use strict";  function byId(id){return document.getElementById(id);}  window.addEventListener('load', onLoad, false); function onLoad(evt) {  byId('addPostBtn').addEventListener('click', onPostBtnClicked, false); }  function onPostBtnClicked(evt) {  let userInput = byId('username__input');  let commentInput = byId('post__input');    let newNode = byId('commentTemplate').content.cloneNode(true);   newNode.querySelector('.user').textContent = userInput.value;  newNode.querySelector('.date').textContent = 'date posted';  newNode.querySelector('.comment').textContent = commentInput.value;   document.body.appendChild(newNode);    userInput.value = '';  commentInput.value = ''; } lt;/scriptgt;  lt;template id='commentTemplate'gt;  lt;div class='userComment'gt;  lt;div class='user'gt;lt;/divgt;  lt;div class='date'gt;lt;/divgt;  lt;div class='comment'gt;lt;/divgt;  lt;/divgt; lt;/templategt;  lt;stylegt; .userComment {  margin-bottom: 16px;  border: solid 2px #888; } lt;/stylegt;  lt;/headgt; lt;bodygt;  lt;div id="addPost"gt;  lt;div class="title"gt;Create new postlt;/divgt;  lt;div class="name"gt;  lt;input type="Name__Post" placeholder="Username" id="username__input" requiredgt;  lt;/divgt;  lt;div class="post"gt;  lt;textarea placeholder="What's on your mind?" id="post__input"gt;lt;/textareagt;  lt;/divgt;  lt;divgt;   lt;button id="addPostBtn"gt;Post Commentlt;/buttongt;  lt;/divgt;  lt;/divgt; lt;/bodygt; lt;/htmlgt;