una - javascript warning message
¿Hay una alerta de JavaScript que no pausa el script? (6)
En este caso, sería más apropiado usar DHTML y JavaScript para visualizar dinámicamente un mensaje, ya sea en un elemento HTML simple, o algo que se parezca más a un diálogo (pero no lo es). Eso te daría el control que necesitas. Todos los principales marcos de JavaScript (YUI, Dojo y otros) le daría la capacidad de mostrar un mensaje de forma asincrónica.
Estoy buscando algo como alert()
, pero eso no "pausa" el script.
Quiero mostrar una alerta y permitir que el siguiente comando, un formulario submit()
, continúe. Por lo tanto, la página cambiará después de que se muestre la alerta, pero no esperará hasta que el usuario haya hecho clic en Aceptar.
¿Hay algo como esto o es solo una de esas cosas imposibles?
No confiablemente Use un div en la nueva página.
Puede que no sea lo que está buscando, pero podría ser apropiado usar window.status = ''foo''.
Utilizo esto mucho en una de mis aplicaciones web para una intranet. También el enfoque setTimeout también funciona, pero puede bloquearse si el navegador está ocupado en una tarea intensa. Sin embargo, la actualización de la barra de estado siempre es inmediata.
Esto requiere que los espectadores tengan la configuración de que javascript puede cambiar la barra de estado, siempre el caso si se trata de un sitio confiable.
Si ya usas JQuery, http://docs.jquery.com/UI/Dialog es fácil de usar y tiene estilos muy buenos.
Puede hacer la alerta en un setTimeout (que es un tiempo de espera muy corto) ya que setTimeout es asincrónico:
setTimeout("alert(''hello world'');", 1);
O para hacerlo correctamente, realmente muestra usar un método en lugar de una cadena en su setTimeout:
setTimeout(function() { alert(''hello world''); }, 1);
De lo contrario, se abrirá a ataques de inyección de JavaScript. Cuando pasa una cadena, se ejecuta a través de la función de eval
JavaScript.
El 98% del tiempo hay una forma de mover su script de mensaje para que llame después de que se ejecute todo lo demás. Para ese otro 2%, me gusta usar divs flotantes que se parecen a esto. A continuación, puede cambiar su CSS para que coincida con el estilo de su aplicación / sitio web o para que se vea más como una ventana emergente estándar.
/*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);
}