При нажатии кнопка выполняет свою функцию, которая также изменяет ее внешний вид, и я хочу, чтобы внешний вид изменился всего на 2 секунды, чем вернулся к нормальному

#javascript #html #css

Вопрос:

 function Post(){  let pstInpStr = pstInp.value  let usrInpStr = usrInp.value   if (usrInpStr == "" || pstInpStr == ""){  alert("Empty Field")  return false  }   let pst_added =  `lt;div style = "border: 1px solid lightgray; border-radius: 10px; margin-bottom:10px; padding:20px;"gt;  lt;divgt; lt;spangt; lt;bgt; `  usrInp.value  `lt;/bgt; 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  = pst_added   if (usrInpStr.length gt; 0 amp;amp; pstInpStr.length gt; 0){  usrInp.value = ""  pstInp.value = ""  setTimeout(function(){  post.style.background = "rgb(37, 202, 31)"  post.innerHTML = "Posted ✔️"}, 2000)  }  } 
 #addPost button{   width: 100%;  height: 39px;  cursor: pointer;  background: rgb(227, 69, 41);  border: 1px solid lightgray; } 
 lt;divgt;   lt;button type="submit" onclick="Post()" id="post"gt;Postlt;/buttongt; lt;/divgt;  lt;!-- begin snippet: js hide: false console: true babel: false --gt; 

Вот моя кнопка, она находится в функции, и когда функция выполняется, кнопка становится зеленой и меняет свой внутренний текст. Я хочу, чтобы эти изменения происходили всего 3 секунды, а затем возвращались к нормальному состоянию, которое является CSS. Я старался не копировать весь свой код, но если мне понадобится более подробная информация в моем коде, пожалуйста, дайте мне знать. Мой js запускает мой код через 2 секунды, что противоположно тому, что я хочу.

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

1. Куда вы вызываете свой javascript? После тела?

2. Я просто добавил больше деталей, это в основном сообщение, и когда HTML публикуется, моя кнопка меняется.

3. Пожалуйста, приведите минимальный воспроизводимый пример

Ответ №1:

Вы можете использовать a Promise , чтобы подождать определенный период времени и снова изменить фон.

Приведенный async ниже IIFE предназначен для того, чтобы его можно await было использовать.

 pstInp = {  "value": "Some string", }  usrInp = {  "value": "Hello, General Kenobi", } /* The above is only for the snippet to work, please don't include it in your real code! ;) */  const wait = (ms) =gt; new Promise(resolve =gt; setTimeout(resolve, ms));  function Post() {  let pstInpStr = pstInp.value  let usrInpStr = usrInp.value   if (usrInpStr == "" || pstInpStr == "") {  alert("Empty Field")  return false  }  let pst_added =  `lt;div style = "border: 1px solid lightgray; border-radius: 10px; margin-bottom:10px; padding:20px;"gt;  lt;divgt; lt;spangt; lt;bgt; `   usrInp.value   `lt;/bgt; 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  = pst_added   if (usrInpStr.length gt; 0 amp;amp; pstInpStr.length gt; 0) {  (async () =gt; {  usrInp.value = ""  pstInp.value = ""  post.style.background = "rgb(37, 202, 31)"  post.innerHTML = "Posted ✔️"  await wait(2000);  post.innerHTML = "Post"  post.style.background = "rgb(239, 239, 239)"  })();  } } 
 #addPost button {  width: 100%;  height: 39px;  cursor: pointer;  background: rgb(227, 69, 41);  border: 1px solid lightgray; } 
 lt;div id="post__body"gt;   lt;divgt;  lt;button type="submit" onclick="Post()" id="post"gt;Postlt;/buttongt;  lt;/divgt; lt;/divgt;