Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个JavaScript警报不';不要暂停脚本?_Javascript - Fatal编程技术网

是否有一个JavaScript警报不';不要暂停脚本?

是否有一个JavaScript警报不';不要暂停脚本?,javascript,Javascript,我正在寻找类似于alert()的内容,但这不会“暂停”脚本 我想显示一个警报并允许下一个命令,即表单submit(),继续。因此,页面将在警报显示后更改,但不会等到用户单击“确定” 是否存在类似的情况,或者只是其中一种不可能的情况?您可以在setTimeout(非常短的超时)中执行警报,因为setTimeout是异步的: setTimeout("alert('hello world');", 1); 或者,为了正确地执行此操作,您需要在setTimeout中使用方法而不是字符串: setTim

我正在寻找类似于
alert()
的内容,但这不会“暂停”脚本

我想显示一个警报并允许下一个命令,即表单
submit()
,继续。因此,页面将在警报显示后更改,但不会等到用户单击“确定”


是否存在类似的情况,或者只是其中一种不可能的情况?

您可以在setTimeout(非常短的超时)中执行警报,因为setTimeout是异步的:

setTimeout("alert('hello world');", 1);
或者,为了正确地执行此操作,您需要在setTimeout中使用方法而不是字符串:

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

否则,您将面临JavaScript注入攻击。当您传递一个字符串时,它将通过JavaScript
eval
函数运行。

在这种情况下,更适合使用DHTML和JavaScript动态显示消息,可以是普通HTML元素,也可以是看起来更像对话框(但不是对话框)的内容。这会给你所需要的控制。所有主要的JavaScript框架(YUI、Dojo和其他框架)都提供了异步显示消息的能力。

不可靠。在新页面上使用div。

它可能不是您想要的,但可能适合使用window.status='foo'

我在一个内联网的webapp中经常使用这个。setTimeout方法也可以工作,但是如果浏览器忙于一项高强度的任务,它可能会阻塞。但是,状态栏更新始终是即时的


这确实需要您的查看者设置javascript可以更改状态栏——如果它是受信任的站点,则始终如此。

如果已经使用JQuery,则使用起来很简单,样式也很好。

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);
}
/*HTML*/
/*javaScript*/
函数openWindow(id){
“严格使用”;
document.getElementById(id).style.visibility='visible';
}
函数关闭窗口(id){
“严格使用”;
document.getElementById(id).style.visibility='hidden';
}
函数myMsgBox(标题、消息){
“严格使用”;
document.getElementById(“msgBox”).innerHTML=“+TITLE+”

“+MESSAGE+”

”; openWindow(“msgBox”); } /*CSS*/ .浮动div{ 位置:绝对位置; z指数:10000; 左:33%; 顶部:250px; 宽度:33%; 背景色:#FFF; 最小宽度:217px; 文本对齐:左对齐; 边界半径:10px 10px; 边框:实心; 边框宽度:1px; 边框颜色:#000; 垂直对齐:顶部; 填充:10px; 背景图像:-ms线性梯度(顶部,#CCCCCC 0%,#FFFFFF 25px,#FFFFFF 100%); 背景图像:-moz线性梯度(顶部,#CCCCCC 0%,#FFFFFF 25px,#FFFFFF 100%); 背景图像:-o-线性梯度(顶部,#CCCCCC 0%,#FFFFFF 25px,#FFFFFF 100%); 背景图像:-webkit线性渐变(顶部,#CCCCCC 0%,#FFFFFF 25px,#FFFFFF 100%); 背景图像:线性梯度(至底部,#CCCCCC 0%,#FFFFFF 25px,#FFFFFF 100%); 盒影:3px 3px 5px#003; 过滤器:progid:DXImageTransform.Microsoft.Shadow(颜色='#000033',方向=145,强度=3); }
在页面之前需要它,以便用户知道他们的数据正在提交。然后最好的方法是在后台将其提交给返回更新的web服务。这样,在页面完成之前,您无需更改页面。setTimeout(“alert()”)经常被阻止:这取决于您的情况是否可能是问题。不要向setTimeout传递字符串,传递函数。setTimeout(function(){alert('hello world');})更好——函数是JavascriptYeah中的一级对象。我知道我应该把它作为一个函数,而不是一个要求值的字符串。这个解决方案不适用于Chrome,即使在setTimeout中,警报也会暂停所有浏览器脚本。
setTimeout
不是异步的,它只是延迟了阻塞代码的同步执行。一旦警报显示,代码执行仍然被阻止,直到用户单击OK。是的,John Weisz说,这没有帮助,警报一出现,页面就在后台冻结(除了一些动画)是的,以前使用过这个,但我不想为简单的事情添加所有额外的代码。好的想法,但不是很明显。我试图阻止用户再次单击链接,这样他们就不会多次提交表单(不会弄乱数据,但会弄乱用户的头脑,因为他们不希望表单提交,但需要保存数据)。什么在改变
window.status
应该做什么?@maxpleaner现在。当浏览器有永久状态栏时,它更有用。