2012-10-29 72 views
0

我試圖存儲div的內容,暫時顯示一個感謝消息,然後放回div的原始內容。對於一些(可能是很多)原因,這是失敗的,我不明白爲什麼。我做錯了什麼?jquery淡出,淡入淡出,等待,淡入淡出

$('#btn').on('click', function() { 
    //store original content 
    //appears to be a text string, rather than a jquery object 
    var content = $('#container').html(); 
    console.log(content); 
    $('#container').children().fadeOut(800, function() { 
     $('#container').html('<div id="thanks">Thanks!</div>', function() { 
      $('#thanks').fadeIn(800, function() { 

       var t=setTimeout(function(){$('#container').html(content)},3000) 

      }); 
     }); 
    }); 
});​ 

http://jsfiddle.net/gaZCW/

+0

什麼是失敗,你得到什麼錯誤消息? –

回答

0

的HTML功能是同步的......沒有必要回調:http://jsfiddle.net/gaZCW/10/

$('#container').children().fadeOut(800, function() { 
    $('#container').html('<div id="thanks">Thanks!</div>'); 
    $('#thanks').fadeIn(800, function() { 
     $(this).delay(3000).fadeOut(800, function() { 
      $('#container').html(content).children().hide().fadeIn(800); 
     }); 
    }); 
}); 

另外,delay將變得更清潔(更c oncise)比在這種情況下設置超時。

2

html函數只有一個參數。所以你的回調沒有被調用。

我檢查the source可以肯定:

html: function(value) { 

你可以這樣做:

$('#container').html('<div id="thanks">Thanks!</div>'); 
$('#thanks').fadeIn(800, function() { 
    var t=setTimeout(function(){$('#container').html(content)},3000) 
}); 
+0

aha。這就說得通了。我怎麼能在這種情況下構造一個功能回調?謝謝! – 1252748

+0

你爲什麼需要回撥?此調用是同步的,您甚至不需要加載遠程資源。 –

+0

我沒有一個很好的解釋。此代碼在「謝謝」中淡出,但它不會將原始內容放入3秒setTimeout之後。謝謝你的幫助。 – 1252748