2012-05-05 47 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