Подтвердить что ты не робот

Есть ли предупреждение JavaScript, которое не приостанавливает script?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

/*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);
}