2

为了在单击按钮后执行某些方法时显示不透明的背景或动画 gif 无法显示此内容。它仅在所有代码执行完毕后运行。

我可以在 jQuery 中执行此操作吗,即在主代码之前和之后的单击事件呈现 html 更改。

长时间运行的方法是向页面添加 100-500 个 div,大约需要 10 秒才能完成。

$('#button).click(function() {   
    $('#curtain').css('visibility', 'visible');
    longRunningMethod();    
    $('#curtain').css('可见性', '隐藏');  
 });    

问题是#curtain div 从不显示,因为必须在呈现所有更改之前执行完整的 javascript。

风格:

#窗帘 {
    位置:固定;
    _位置:绝对;
    z指数:99;
    左:0;
    顶部:0;
    宽度:100%;
    高度:100%;
    _height: 表达式(document.body.offsetHeight + "px");
    背景颜色:#CCCCCC;
    过滤器:alpha(不透明度=50);
    -moz-不透明度:0.5;
    -khtml-不透明度:0.5;
    不透明度:0.5;
    可见性:隐藏;
}

4

2 回答 2

2

这是一种 hack,但如果您使用 setTimeout 它可能会起作用。

$('#button').click(function() {   
    $('#curtain').css('visibility', 'visible');
    setTimeout(doBigJob, 100);
 });

function doBigJob()
{
    longRunningMethod();    
    $('#curtain').css('visibility', 'hidden');
}
于 2010-12-14T21:20:25.650 回答
0

你不应该在网页的 UI 线程中有长时间运行的方法。它会使页面看起来被锁定并且对用户来说非常烦人。

相反,您应该使用异步回调。我假设的长期运行方法会执行一些 AJAX 调用。在这种情况下,它应该接受一个函数作为参数(如 jquery “click”、“ajax”等)。然后将该函数作为完成或成功回调传递给 ajax 方法。

然后你可以这样做:

$('#button).click(function() {   
    $('#curtain').css('visibility', 'visible');
    longRunningMethod(function() {$('#curtain').css('visibility', 'hidden');});
 });
于 2010-12-14T21:20:00.487 回答