Как сделать так, чтобы alert("!") появлялся только после завершения выполнения функции Myconfirmselect()? Необходимо, чтобы alert не появлялся до тех пор, пока хотя бы одна кнопка в диалоговом окне не будет нажата. <br/> <br/> <pre><code class="html"><html> <body onload="Load()"> <dialog></dialog> <script> function Load() { setTimeout(() => { Myconfirmselect( "Готовы?" + "¤" + "Да" + "¥" + "alert('Да');" + "º" + "Нет" + "¥" + "alert('Нет');" ); alert("!");//срабатывает сразу, нужно исправить преждевременное всплытие }, 500); } function Myconfirmselect(VarInput) { //setTimeout(() => //{ document.querySelector("dialog").innerHTML += ` <div> <textarea></textarea> </div> `; document.querySelector("dialog").style.textAlign = "center"; document.querySelector("dialog").querySelector("div").querySelector("textarea").style.width = "100%"; document.querySelector("dialog").querySelector("div").querySelector("textarea").style.textAlign = "center"; document.querySelector("dialog").querySelector("div").querySelector("textarea").style.resize = "none"; document.querySelector("dialog").querySelector("div").querySelector("textarea").readOnly = true; document.querySelector("dialog").querySelector("div").querySelector("textarea").value = VarInput.split("¤")[0]; for (var i = 0; i < VarInput.split("¤")[1].split("º").length; i++) { var VarButton = document.createElement("button"); VarButton.textContent = VarInput.split("¤")[1].split("º")[i].split("¥")[0]; VarButton.id = VarInput.split("¤")[1].split("º")[i].split("¥")[1]; VarButton.style.marginLeft = "10px"; VarButton.style.marginTop = "10px"; VarButto
Чтобы сделать так, чтобы предупреждение `alert("!")` отображалось только после нажатия кнопок «Да» или «Нет» в диалоговом окне и не появлялось до нажатия одной из кнопок, вам нужно переместить вызов `alert("!")` в функции, которые обрабатывают нажатия на кнопки. Вот как вы можете модифицировать ваш код: ```html <html> <body onload="Load()"> <dialog></dialog> <script> function Load() { setTimeout(() => { Myconfirmselect( "Готовы?" + "¤" + "Да" + "¥" + "buttonYes();" + "º" + "Нет" + "¥" + "buttonNo();" ); }, 500); } function Myconfirmselect(VarInput) { document.querySelector("dialog").innerHTML += ` <div> <textarea></textarea> </div> `; document.querySelector("dialog").style.textAlign = "center"; document.querySelector("dialog").querySelector("div").querySelector("textarea").style.width = "100%"; document.querySelector("dialog").querySelector("div").querySelector("textarea").style.textAlign = "center"; document.querySelector("dialog").querySelector("div").querySelector("textarea").style.resize = "none"; document.querySelector("dialog").querySelector("div").querySelector("textarea").readOnly = true; document.querySelector("dialog").querySelector("div").querySelector("textarea").value = VarInput.split("¤")[0]; for (var i = 0; i < VarInput.split("¤")[1].split("º").length; i++) { var VarButton = document.createElement("button"); VarButton.textContent = VarInput.split("¤")[1].split("º")[i].split("¥")[0]; VarButton.setAttribute("onclick", VarInput.split("¤")[1].split("º")[i].split("¥")[1]); VarButton.style.marginLeft = "10px"; VarButton.style.marginTop = "10px"; document.querySelector("dialog").appendChild(VarButton); } document.querySelector("dialog").showModal(); } function buttonYes() { alert('Да'); alert("!"); } function buttonNo() { alert('Нет'); alert("!"); } </script> </body> </html> ``` ### Изменения в коде: 1. Вызовы `alert('Да')` и `alert('Нет')` были перенесены в отдельные функции `buttonYes()` и `buttonNo()`. 2. В функции `Myconfirmselect` теперь кнопки создаются с атрибутом `onclick`, который вызывает соответствующие функции `buttonYes()` или `buttonNo()`. 3. После отображения сообщения «Да» или «Нет» вызывается `alert("!")`. Теперь `alert("!")` будет показан только после нажатия одной из кнопок.
<html> <body onload="Load()"> <dialog></dialog> <script> function Load() { setTimeout(() => { // Создаём колбэк, функцию, которая будет вызываться только после нажатия на кнопку const callback = function () { alert("!"); }; Myconfirmselect( "Готовы?" + "¤" + "Да" + "¥" + "alert('Да');" + "º" + "Нет" + "¥" + "alert('Нет');", callback, // Передаём колбэк в функцию создания диалога ); }, 500); } function Myconfirmselect(VarInput, callback) { document.querySelector("dialog").innerHTML += ` <div> <textarea></textarea> </div> `; const dialog = document.querySelector("dialog"); const textarea = dialog.querySelector("textarea"); dialog.style.textAlign = "center"; textarea.style.width = "100%"; textarea.style.textAlign = "center"; textarea.style.resize = "none"; textarea.readOnly = true; textarea.value = VarInput.split("¤")[0]; for ( let i = 0; i < VarInput.split("¤")[1].split("º").length; i++ ) { const VarButton = document.createElement("button"); VarButton.textContent = VarInput.split("¤")[1] .split("º") [i].split("¥")[0]; VarButton.id = VarInput.split("¤")[1] .split("º") [i].split("¥")[1]; VarButton.style.marginLeft = "10px"; VarButton.style.marginTop = "10px"; VarButton.addEventListener("click", () => { eval(event.target.id); // Вызов того самого callback после нажатия на кнопку callback(); //ButtonClosealert(); }); document .querySelector("dialog") .querySelector("div") .appendChild(VarButton); } function ButtonClosealert() { dialog.style.animation = "AnimFormHide 0.1s both"; setTimeout(() => { dialog.style.textAlign = "initial"; const div = dialog.querySelector("div"); dialog.removeChild(div); dialog.close(); }, 100); } dialog.style.animation = "AnimFormShow 0.25s both"; dialog.showModal(); } </script> <style> @keyframes AnimFormShow { 0% { transform: translateY(-150%); } } @keyframes AnimFormHide { 100% { transform: translateY(-150%); display: none; } } dialog, #DialogCycle { border: 2px solid black; border-radius: 15px; } dialog div, #DialogCycle div { position: initial; } dialog::backdrop, #DialogCycle::backdrop { background: rgba(0, 0, 0, 0.6); } </style> </body> </html>