Есть ли предупреждение JavaScript, которое не останавливает сценарий? - PullRequest
28 голосов
/ 20 ноября 2008

Я ищу что-то вроде alert(), но это не "останавливает" сценарий.

Я хочу отобразить предупреждение и позволить следующей команде, форме submit(), продолжить. Таким образом, страница будет меняться после отображения предупреждения, но не будет ждать, пока пользователь не нажмет OK.

Есть что-то подобное или это одна из тех невозможных вещей?

Ответы [ 6 ]

49 голосов
/ 20 ноября 2008

Вы можете сделать предупреждение в setTimeout (который очень короткий тайм-аут), так как setTimeout является асинхронным:

setTimeout("alert('hello world');", 1);

Или, чтобы сделать это правильно, вы действительно показываете использование метода вместо строки в вашем setTimeout:

setTimeout(function() { alert('hello world'); }, 1);

В противном случае вы открываете себя для внедрения JavaScript-инъекций. Когда вы передаете строку, она запускается через функцию JavaScript eval.

3 голосов
/ 20 ноября 2008

Если вы уже используете JQuery http://docs.jquery.com/UI/Dialog, он прост в использовании и имеет приятные стили.

2 голосов
/ 20 ноября 2008

Возможно, это не то, что вы ищете, но может быть целесообразно использовать window.status = 'foo'.

Я часто использую это в одном из своих веб-приложений для интранета. Также работает подход setTimeout, но он может блокироваться, если браузер занят интенсивной задачей. Однако обновление строки состояния всегда происходит немедленно.

Это требует от ваших зрителей установки, чтобы javascript мог изменять строку состояния - всегда, если это доверенный сайт.

1 голос
/ 20 июля 2015

98% времени есть способ переместить ваш скрипт сообщения так, чтобы он вызывал после того, как все остальное выполнится. Для других 2% мне нравится использовать плавающие div, которые выглядят примерно так. Затем вы можете изменить свой CSS, чтобы он соответствовал стилю вашего приложения / веб-сайта или чтобы он больше походил на стандартное всплывающее окно Windows.

/*HTML*/
<div class="floatingDiv" id="msgBox" style="visibility:hidden"></div>

/*javaScript*/
function openWindow(id){
"use strict";
document.getElementById(id).style.visibility = 'visible'; 
}
function closeWindow(id){
"use strict";
document.getElementById(id).style.visibility = 'hidden'; 
}
function myMsgBox(TITLE,MESSAGE) {
"use strict";   
document.getElementById("msgBox").innerHTML = "<a href=\"javascript:closeWindow('msgBox')\" style=\"float:right\"><img src=\"imgs/close.png\" onmouseover=\"src='imgs/closeOver.png'\" onmouseout=\"src='imgs/close.png'\"/ alt=\"[close]\"></a><h2 style=\"text-align:center; margin-top:0px;\">" + TITLE + "</h2><hr><p align=\"left\">" + MESSAGE + "</p>";
openWindow("msgBox");
}

/*CSS*/
.floatingDiv {
position:absolute;  
z-index:10000;
left:33%;
top:250px;
width:33%;
background-color:#FFF;
min-width:217px;
text-align: left;
border-radius: 10px 10px;
border:solid;
border-width:1px;
border-color:#000;
vertical-align:top;
padding:10px;

background-image: -ms-linear-gradient(top, #CCCCCC 0%, #FFFFFF 25px, #FFFFFF 100%);
background-image: -moz-linear-gradient(top, #CCCCCC 0%, #FFFFFF 25px, #FFFFFF 100%);
background-image: -o-linear-gradient(top, #CCCCCC 0%, #FFFFFF 25px, #FFFFFF 100%);
background-image: -webkit-linear-gradient(top, #CCCCCC 0%, #FFFFFF 25px, #FFFFFF 100%);
background-image: linear-gradient(to bottom, #CCCCCC 0%, #FFFFFF 25px, #FFFFFF 100%);

box-shadow:3px 3px 5px #003; 
filter: progid:DXImageTransform.Microsoft.Shadow(color='#000033', Direction=145, Strength=3);
}
1 голос
/ 20 ноября 2008

Ненадежно. Используйте div на новой странице.

1 голос
/ 20 ноября 2008

В этом случае было бы более целесообразно использовать DHTML и JavaScript для динамического отображения сообщения, либо в виде простого HTML-элемента, либо в форме, которая больше похожа на диалог (но не похожа). Это даст вам контроль, который вам нужен. Все основные JavaScript-фреймворки (YUI, Dojo и другие) дают вам возможность отображать сообщение асинхронно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...