2010-12-27 3 views
3

So einfach habe ich versucht, den folgenden Fehler Debuggen:jQuery Hide-Funktion: Warum versucht Geschwindigkeit: 0 noch zu animieren?

<script> 
$(function() { 
    div = $('<div />'); 
    div.text('test'); 
    div.hide(0); 
    div.appendto('body'); 
}); 
</script> 

Wenn ich dies der DIV ausführen gezeigt wird. Eventuell verstecke ich es (bevor wir es dem DOM hinzufügen). Der folgende Code:

<script> 
$(function() { 
    div = $('<div />'); 
    div.text('test'); 
    div.hide(); 
    div.appendto('body'); 
}); 
</script> 

tut die DIV verstecken.

Wenn ich jQuery Quellcode für die Hide-Funktion gehen in Ich sehe dies:

hide: function(speed, easing, callback) { 
    if (speed || speed === 0) { 
     return this.animate(genFx("hide", 3), speed, easing, callback); 

    } else { 
     for (var i = 0, j = this.length; i < j; i++) { 
      var display = jQuery.css(this[i], "display"); 

      if (display !== "none") { 
       jQuery.data(this[i], "olddisplay", display); 
      } 
     } 

     // Set the display of the elements in a second loop 
     // to avoid the constant reflow 
     for (i = 0; i < j; i++) { 
      this[i].style.display = "none"; 
     } 

     return this; 
    } 
}, 

Warum es nicht überprüft

if (speed || speed === 0) { 

Vor allem die, Geschwindigkeit === 0. Ich würde davon ausgehen, wenn die Geschwindigkeit Null ist. Man kann die Animate-Funktion einfach ganz überspringen und einfach die Anzeige hinzufügen: none; zu dem Element.

ps. Ich nehme an, dass es einfach fehlschlägt, da wir ein Element, das nicht in der Domäne existiert, der animierten Funktion geben. Es gibt nichts zu animieren. Dort versteckt die animierte Funktion das DIV nicht.

Danke für alle Antworten in forward :) War auf der Suche nach etwa 10 Minuten für die richtige Syntax (hide()) statt ausblenden (0)) Aber immer noch es unlogisch gefunden. Dafür ist die Frage :)

Antwort

8

Wenn Sie die belebter überspringen wollte, würden Sie nur .hide() tun ... von .hide(0) auch erlaubt, können Sie Warteschlange esohne eine Dauer ... so fügt es eine große Nützlichkeit für die Funktion.

Zum Beispiel:

$(".myElem").delay(2000).hide(0); 

Wo, wie dies nicht funktionieren würde:

$(".myElem").delay(2000).hide(); 

.... weil .hide() ohne Argumente nicht Teil einer fx Warteschlange ist, und würde passieren, sofort .

+0

Hmh. Hatte nicht an die wartende Schlange gedacht. Vielen Dank :) – Tjirp