2012-05-05 45 views
0

我确定这个问题已经被问到了,但是我找不到用来提供google的好关键字。我甚至无法为我的问题找到一个好标题。 我想这样做:fire css在代码结束前更改

$(".selector").click(function() { 
    $(this).css("background-color", "red"); 
    if (confirm("Do you want to do this ?") { 
     // do this 
    } else { 
     $(this).css("background-color", "transparent"); 
    } 
}); 

但我只确认后的CSS变化被触发。在确认之前(或在确认过程中)我怎样才能开火?

谢谢。

回答

1

我敢打赌,这只是一个简单的事情,增加一个延迟(即使只有0毫秒)。这将确保在确认消息出现之前页面重新绘制。

$(".selector").click(function() { 
    $(this).css("background-color", "red"); 
    var _this = this; 
    function confirmCode(){ 
     if (confirm("Do you want to do this ?") { 
      // do this 
     } else { 
      $(_this).css("background-color", "transparent"); 
     } 
    } 
    setTimeout(function(){confirmCode()}, 0) 
}); 

编辑:添加完整的代码

+0

它的作品!我希望一个解决方案,而不需要另一个功能,也许有一些jQuery的魔法,但我想这是一个JavaScript的限制。实际上,在确认消息出现之前,我不需要重新绘制。我可以在“确认”对话框中“进行”。但即使我等了一个小时,它也不会重新绘制,直到我点击确定,并且代码终止。 – Matthieu

+0

@Matthieu是的,这是一个与CSS一致的浏览器怪癖。不幸的是,任何有CSS变化的对话都需要这样。 –

+0

不需要传递setTimeout一个新函数,可以这样调用它:setTimeout(confirmConde,0); – robrich