2013-04-12 40 views
4

我試圖在沒有動畫的情況下切換元素的可見性,但是使用了一個完整的函數,以便更改啓動切換的鏈接的文本。jQuery切換()沒有動畫,但完整的功能?

jQuery('.toggle_tags').click(function(){ 
    var elem = jQuery(this); 
    jQuery('#taglist').toggle({complete: function() { 
     if (jQuery(this).is(':visible')) { 
      elem.text('(Hide Tags)'); 
     } else { 
      elem.text('(View Tags)'); 
     } 
    },}); 
    return false; 
}); 

不幸的是,這仍然是觸發動畫。沒有任何參數,切換不會動畫,但即使只是傳遞一個函數或完整的函數(如上),我仍然會獲得動畫。

有什麼建議嗎?

+0

我不確定這一點是什麼。 「this」指向切換參數的內容,爲什麼不能在切換之外引用它? – JJJ

+0

問題是'toggle'的默認'duration'參數是'400'。 –

+0

@Juhana我的理解是它是異步的,不使用完整的函數可能意味着'可見'測試將是不可靠的。 – deed02392

回答

10

請勿使用complete功能。

沒有參數,.toggle()將同步運行,這意味着你可以測試它在未來的聲明沒有,知道它會已經結束,你可以使用:

jQuery('#taglist').toggle(); 
if (jQuery('#taglist').is(':visible')) { 
    elem.text('(Hide Tags)'); 
} else { 
    elem.text('(View Tags)'); 
} 
+0

謝謝,不知道它是沒有params同步。爲什麼要提供完整的回調呢? – deed02392

+0

@ deed02392對於* *有*動畫的情況。 – JJJ

2

嘗試增加duration: 0到選項對象。更多信息in the docs

+0

我考慮過這個,但對於jQuery來說它看起來不夠優雅。 ;-) – deed02392

+0

根據文檔,這基本上是設置'jQuery.fx.off = true',所以在我看來這是相當jQuery適當的。 – jxpx777