2012-11-12 49 views
0

我有一個關於jquery的問題,即時通訊嘗試拋出一個狀態框,顯示向最終用戶保存成功。jquery顯示在不透明後沒有任何顯示0

我的問題是出後,其因爲在div的不透明度設置爲0,而不是顯示沒有我不能對任何輸入欄點擊,這裏是我的代碼:

function messageBox(x){ 

n = x.indexOf('SUCCESS'); 

    if(n!==-1){ 
     $("#messageBoxSuccess").text(x.replace('SUCCESS', '')) 
     $("#messageBoxSuccess").fadeTo(1000, 1); 
     $("#messageBoxSuccess").delay(500); 
     $("#messageBoxSuccess").fadeTo(1000, 0); 

    }else{ 
     $("#messageBoxError").text(x.replace('ERROR', '')) 
     $("#messageBoxError").fadeTo(1000, 1); 
     $("#messageBoxError").delay(500); 
     $("#messageBoxError").fadeTo(1000, 0); 


    } 
} 

回答

2

jQuery的fadeTo有所回調事件

.fadeTo(duration, opacity [, callback]) 

所以你可以做

$("#messageBoxError").fadeTo(1000, 0, function(){ $(this).hide() }); 

設置顯示:在結束無的fadeTo。

3

使用

$("#messageBoxSuccess").fadeIn(500, function() { }); 
$("#messageBoxSuccess").fadeOut(500, function() { }); 
改爲

。這將消失爲0或1,並且在完成衰落到0之後隱藏(display:none)元素。

+0

一些很棒的評論在這裏傢伙,所有排序現在感謝 – Deano

0

.fadeTo不改變顯示風格。如果你想改變顯示爲無,用.fadeOut().fadeIn()

0

正如其他人所說,你可以使用.fadeIn().fadeOut()來自動隱藏/顯示內容。您還可以清理你的代碼,這樣很多:

function messageBox(x){ 
    var replaceText, msgBoxId; 

    if (x.indexOf('SUCCESS') !== -1) { 
     replaceText = "SUCCESS"; 
     msgBoxId = "#messageBoxSuccess"; 
    } else { 
     replaceText = "ERROR"; 
     msgBoxId = "#messageBoxError"; 
    } 

    $(msgBoxId).text(x.replace(replaceText, '')) 
     .fadeIn(1000).delay(500).fadeOut(1000); 
} 

變化:

  1. 刪除了未聲明的變量n這是一種隱性的全球
  2. 集「成功」或「錯誤的需要「味精盒ID在條件
  3. 移動之外條件的所有其他常見的代碼,而不是重複了兩遍
  4. 使用jQuery鏈,使$("#messageBoxSuccess")或`$(「#messageBoxError」)僅評估一次。
  5. 切換到.fadeOut().fadeIn(),這樣動畫前/後自動隱藏/顯示內容。