Как сделать так, чтобы 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("!")` будет показан только после нажатия одной из кнопок.
<pre><code class="javascript"><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></code></pre>