日期:2014-05-16  浏览次数:20942 次

关于函数执行顺序及遮罩问题!
我在asp页面中有一个datagrid,设定一个按钮“导出”:'-', {
text : '导出Ecel',
iconCls : 'icon-edit',
handler : function() {
showsending();
ExporterExcel();
closesending();
}
},
现在问题是每次都是先执行ExporterExcel();函数???然后才是showsending();,和closesending();??我想要的效果是先弹出提示,导出完后,关闭提示!谢谢!

<script type="text/javascript" charset="utf-8">

function showsending(){
var win = $.messager.progress({msg:'文件导出中...',interval:'1000'});
 
}
function closesending(){
 $.messager.progress('close');

}


//EasyUI datagrid 动态导出Excel
function ExporterExcel() 


var oWB = oXL.Workbooks.Add();//新建一个Excel工作簿 
var oSheet = oWB.ActiveSheet;//指定要写入内容的工作表为活动工作表
var rows = $('#jixiaokaohe').datagrid('getRows');
var columns = $("#jixiaokaohe").datagrid("options").columns[0];



var myDate = new Date();



for (m=1;m <columns+1;m++){//去除其中"选择列"
oSheet.Columns(m).VerticalAlignment=-4108;//垂直对齐方式
oSheet.Columns(m).HorizontalAlignment=-4108;//水平对齐方式
oSheet.Columns(m).NumberFormatLocal = "@"; //单元格为文本格式
oSheet.Columns(m).AutoFit;//所有列自适应宽度

}


oXL.Visible = true; 
oXL.UserControl = true;
oXL=null;
oWB=null;
oSheet=null;

</script>
------解决方案--------------------
ExporterExcel() 你这个方法是同步执行的,浏览器会假死,IE浏览器会挂起settimeout那种代码执行,你用chrome看看应该有效果。。
------解决方案--------------------
JS 是解释执行的,也就是说从代码的第一行逐行执行到最后一行!它是一个单线程的脚本程序,本身并不支持多线程。

但是呢,JS中的 setTimeout ,setInterval 却是异步的,产生的是多线程的效果,这不是JS本身的,是浏览器提供的。

如果你有用到这个 那么 需要在 setTimeout ,setInterval 完成后才执行的脚本,应该写在 setTimeout ,setInterval 响应函数里面,或者用一个全局变量做标识,周期的判断这个变量,根据结果选择执行。
------解决方案--------------------
引用:
Quote: 引用:

ExporterExcel() 你这个方法是同步执行的,浏览器会假死,IE浏览器会挂起settimeout那种代码执行,你用chrome看看应该有效果。。


不好意思!有没有什么方法能够实现我要的效果呢??谢谢


要改ExporterExcel() 这个方法。。因为是同步执行导致效果根本没有呈现出来,执行完ExporterExcel() 直接执行你的关闭了所以没有反应,chrome优化过js,你的那个动态效果应该会出现

改ExporterExcel() 这个不太现实。。