jQuery show "laden" während der langsamen Bedienung

Ich versuche zu zeigen, ein kleines Bild, während eine langsame operation ist mit jQuery und kann Sie nicht Recht.
Es ist eine GROßE Tabelle mit tausenden von Zeilen. Wenn ich die Option "mostrarArticulosDeReferencia" checkbox entfernt es die "hidden" - Klasse aus diesen Zeilen. Dieser Vorgang dauert ein paar Sekunden, und ich möchte feedback geben.
"laden" ist ein div mit einem kleinen animierten gif

Hier ist der vollständige code

jQuery(document).ready(function() {
jQuery("#mostrarArticulosDeReferencia").click(function(event){
    if( jQuery("#mostrarArticulosDeReferencia").attr("checked") ) {
        jQuery("#loading").show(); //not showing
        jQuery("#listadoArticulos tr.r").removeClass("hidden"); //slow operation
        jQuery("#loading").hide();
    } else {
        jQuery("#loading").show();  //not showing
        jQuery("#listadoArticulos tr.r").addClass("hidden");  //slow operation
        jQuery("#loading").hide();
    }
});
jQuery("#loading").hide();
});

Sieht es aus wie jquery ist "Optimierung" diese 3 Zeilen

        jQuery("#loading").show(); //not showing
        jQuery("#listadoArticulos tr.r").removeClass("hidden");
        jQuery("#loading").hide();

Und niemals zeigt das laden div.
Irgendwelche Ideen?

Bonus: Es ist ein schneller Weg, dies zu tun einblenden/ausblenden Sache? Finden Sie heraus, dass der Knebel ist WEG langsamer.

UPDATE:
Ich habe versucht, diese

    jQuery("#mostrarArticulosDeReferencia").click(function(event){
    if( jQuery("#mostrarArticulosDeReferencia").attr("checked") ) {
            jQuery("#loading").show(); //not showing
            jQuery("#listadoArticulos tr.r").removeClass("hidden"); //slow operation
            setTimeout("jQuery('#loading').hide()", 1000);
    } else {
            jQuery("#loading").show();  //not showing
            jQuery("#listadoArticulos tr.r").addClass("hidden");  //slow operation
            setTimeout("jQuery('#loading').hide()", 1000);
    }
});

Das ist, was ich

  1. klicken Sie auf das Kontrollkästchen
  2. nichts passiert, während 2/3 Sek. (in Bearbeitung)
  3. Seite aktualisiert wird
  4. laden div zeigt sich während einem Bruchteil einer Sekunde

UPDATE 2:
Ich habe eine funktionierende Lösung. Aber WARUM muss ich das mit setTimeout machen, damit es funktioniert ist mir schleierhaft...

    jQuery("#mostrarArticulosDeReferencia").click(function(event){
    if( jQuery("#mostrarArticulosDeReferencia").attr("checked") ) {
            jQuery("#loading").show();
            setTimeout("jQuery('#listadoArticulos tr.r').removeClass('hidden');", 1);
            setTimeout("jQuery('#loading').hide()", 1);
    } else {
            jQuery("#loading").show();
            setTimeout("jQuery('#listadoArticulos tr.r').addClass('hidden');", 1);
            setTimeout("jQuery('#loading').hide()", 1);
    }
});

UPDATE 3:
Gerade eine bessere Lösung gefunden für diesen Fall.

//mostrar u ocultar articulos de referencia
$("#mostrarArticulosDeReferencia").click(function(event){
    if( $("#mostrarArticulosDeReferencia").attr("checked") )
        $("tr.r").css({'display':'table-row'});
    else
        $("tr.r").css({'display':'none'});
});

Verwenden .css({'display':'none'}) entpuppt sich schneller als hide(), so dass keine Notwendigkeit für die animation zum laden...

Dieser Artikel zeigte mir, das Licht: ein - /ausblenden Leistung.

  • Möchten Sie diese ausführen, während die Seite geladen wird? $(document).ready() wird ausgelöst, wenn alles down ist und geladen
  • Nicht nötig, ich brauche nur während der show ein - /ausblenden Bedienung. Nur klebte der ganze Skript
  • Nur ein Gedanke, haben Sie versucht, mit Kontexten? Wenn Sie ein zweites argument in Ihrem Selektor Anweisung, dies kann helfen, die Geschwindigkeit.
Schreibe einen Kommentar