tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
16
ZUGRIFFE
3579
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
DIESES THEMA IST
GESCHLOSSEN
  1. #1
    NM78 NM78 ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    24
    Ich blicke nicht mehr so richtig durch. Ich versuche mit einem Klick in eine Checkbox mehrere Zeilen einer bestimmten Klasse ein- bzw. auszublenden (wenn das Häkchen gesetzt ist soll eingeblendet werden und anders herum).

    Leider verhalten sich anscheinend der IE 8 und der Firefox 3.5 ganz unterschiedlich.

    Hier mal ein Beispielcode:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    <style type="text/css">
    tr.ausgeblendeteZeile{display:none}
    </style>
     
    <script type="text/javascript"> 
        /* <![CDATA[ */ 
            $(document).ready(function() {
                $("input#meineCheckbox").click(function(){                      
                    if($(this).is(":checked") == "true" || $(this).is(":checked") == "1") $("tr.ausgeblendeteZeile").fadeIn("slow");                        
                    else $("tr.ausgeblendeteZeile").fadeOut("slow");                        
                });
            }); 
        /* ]]> */ 
    </script>
     
    <table>
    <tr>
    <td><input type="checkbox" id="meineCheckbox" name="meineCheckbox" /></td><td>Spalte 2</td>
    </tr>
    <tr class="ausgeblendeteZeile">
    <td>Spalte 1</td><td>Spalte 2</td>
    </tr>
    <tr class="ausgeblendeteZeile">
    <td>Spalte 1</td><td>Spalte 2</td>
    </tr>
    </table>

    Und genau dieses fadeIn klappt nur im Firefox. Im IE passiert garnichts. Dann habe ich mir gedacht, ändere ich eben die css Eigenschaften und habe anstatt fadeIn einfach css("display","inline") verwendet. Das klappt auch prima im IE, allerdings nicht mehr im Firefox (er zeigt dann zwar die Zeilen, behält aber nicht die korrekten Spaltenbreiten bei).

    fadeOut funktioniert dann seltsamerweise wieder in beiden Browsern korrekt.

    Habt Ihr eine Idee wie man das am besten anstellt?

    Dieses is(":checked") verhält sich übrigens auch je nach Browser unterschiedlich. Im IE wird nur "true" zurück gegeben im Firefox dagegen nur "1"...
    Geändert von NM78 (01.07.09 um 11:58 Uhr)
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    versuche es mal mit
    Code :
    1
    
    css("display","")

    zu dem :checked

    So sollte es gleich gehen in allen Browsern:
    Code :
    1
    
    if($(this).is(":checked"))
     

  3. #3
    NM78 NM78 ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    24
    Vielen Dank für die schnelle Antwort!

    Nur

    Code :
    1
    
    if($(this).is(":checked"))

    funktioniert schon mal prima.

    Leider bewirkt

    Code :
    1
    
    $("tr.ausgeblendeteZeile").css("display","");

    nichts. An der Stelle möchte ich ja die Zeilen mit der Klasse "ausgeblendeteZeile" ja auch einblenden. Das geht im Firefox mit fadeIn("slow") und im IE mit css("display","inline"), aber leider nicht in beiden Browsern gleichzeitig.

    Ich suche eine Variante für beide Browser.

    Es geht mit

    Code :
    1
    
    css("display","table-row")

    Leider gibt es dann nicht mehr so eine schöne Animation wie bei fadeIn.

    Und wieso klappt fadeOut mit Animation aber fadeIn nicht. Das verstehe ich nicht.

    Gibts noch eine Variante mit Animation (slideUp und slideDown klappt ja auch nicht)?
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Habs mal probiert, wenn du das ganze über die Zellen selbst machst, gehts in beiden gleichermaßen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <style type="text/css">
    tr.ausgeblendeteZeile td{display:none}
    </style>
    <script type="text/javascript"> 
     
            $(document).ready(function() {
                $("input#meineCheckbox").click(function(){                      
                    if($(this).is(":checked")) $("tr.ausgeblendeteZeile td").fadeIn("slow");                        
                    else $("tr.ausgeblendeteZeile td").fadeOut("slow");                         
                });
            }); 
     
    </script>
     

  5. #5
    NM78 NM78 ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    24
    Ja das blendet bei beiden die Zeilen ein. Allerdings im IE nur immer die 1. Spalte. Alle anderen Spalten werden leider nicht mit eingeblendet. Im Firefox werden alle Spalten mit eingeblendet.

     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    In meinem IE8 wird alles eingeblendet...welche jQuery-Verion hast du denn eingebunden?
     

  7. #7
    NM78 NM78 ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    24
    Müsste eigentlich aktuell sein:

    jQuery v1.3.2
    jQuery UI 1.7.2

    Kompletter Testcode:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    <style type="text/css">
    tr.ausgeblendeteZeile td{display:none}
    </style>
    <script type="text/javascript"> 
     
            $(document).ready(function() {
                $("input#meineCheckbox").click(function(){                      
                    if($(this).is(":checked")) $("tr.ausgeblendeteZeile td").fadeIn("slow");                        
                    else $("tr.ausgeblendeteZeile td").fadeOut("slow");                         
                });
            }); 
     
    </script>
     
    <table>
    <tr>
    <td><input type="checkbox" id="meineCheckbox" name="meineCheckbox" /></td><td>Spalte 2</td>
    </tr>
    <tr class="ausgeblendeteZeile">
    <td>Spalte 1</td><td>Spalte 2</td>
    </tr>
    <tr class="ausgeblendeteZeile">
    <td>Spalte 1</td><td>Spalte 2</td>
    </tr>
    </table>

    Hab Win7RC mit IE 8.0.7 am laufen.
     

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Geht bei mir wie gesagt problemlos:


    Oder meinst du etwas anderes?
     

  9. #9
    NM78 NM78 ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    24
    Es liegt an den von mir gesendeten Headern:

    Code :
    1
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    Hier mal der komplette Quellcode, wobei die jQuery Bibliothek in Unterordner "js" liegt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head xml:lang="de" lang="de">
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
     
    <style type="text/css">
    tr.ausgeblendeteZeile td{display:none;background:#CCC;}
    </style>
    <script type="text/javascript"> 
     
            $(document).ready(function() {
                $("input#meineCheckbox").click(function(){                      
                    if($(this).is(":checked")) $("tr.ausgeblendeteZeile td").fadeIn("slow");                        
                    else $("tr.ausgeblendeteZeile td").fadeOut("slow");                         
                });
            }); 
     
    </script>
    </head>
    <body>
    <table>
    <tr>
    <td><input type="checkbox" id="meineCheckbox" name="meineCheckbox" /></td><td>Setzen Sie ein Häkchen um die anderen Zeilen einzubenden.</td>
    </tr>
    <tr class="ausgeblendeteZeile">
    <td>Spalte 1</td><td>Spalte 2</td>
    </tr>
    <tr class="ausgeblendeteZeile">
    <td>Spalte 1</td><td>Spalte 2</td>
    </tr>
    </table>
    </body>
    </html>

    Wenn ich die dtd nicht mitsende, schaltet der Browser automatisch in den alten Quirks Modus, oder? Dann muss irgendwas an diesem Dokument hier nicht XHTML 1.0 konform sein. Hast Du eine Idee?

    PS: Vielen Dank für die wahnsinnig tolle Unterstützung hier!

    EDIT: Ich habe es bei Validome getestet (auch XML) und bekomme keine Fehler angezeigt.
    Geändert von NM78 (01.07.09 um 16:07 Uhr)
     

  10. #10
    Maik Tutorials.de Gastzugang
    Zitat Zitat von NM78 Beitrag anzeigen
    Wenn ich die dtd nicht mitsende, schaltet der Browser automatisch in den alten Quirks Modus, oder? Dann muss irgendwas an diesem Dokument hier nicht XHTML 1.0 konform sein. Hast Du eine Idee?
    Ohne Dokumenttyp-Definition (DTD) wird das Dokument weiterhin im standardkonformen Modus übergeben, und der W3C-Validator lässt das Markup als valides "XHTML 1.0 Transitional" passieren.

    mfg Maik
     

  11. #11
    NM78 NM78 ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    24
    Ich hatte ursprünglich nicht den korrekten Pfad zur DTD in dem Beispiel. Das hatte ich aber korrigiert. Trotzdem klappt es mit den Spalten nicht.

    @Sven

    Welche Header hast Du gesendet bzw. würdest Du da einbauen?
    Geändert von NM78 (01.07.09 um 16:11 Uhr)
     

  12. #12
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von NM78 Beitrag anzeigen
    Welche Header hast Du gesendet bzw. würdest Du da einbauen?
    Ich hatte garkeinen DOCTYPE

    Hab jetzt mal deinen Code genommen wie aus dem letzten Posting, folgende Ergänzung tut es:
    Code :
    1
    
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

    http://web-gazette.de/2008/tipps-und...zu-ie7-machen/

    Einen Kommentar zu dieser MS-Erfindung spare ich mir lieber
     

  13. #13
    NM78 NM78 ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    24
    Danke, damit geht es in unserem Beispiel hier. Leider klappt das nicht in meiner eigentlichen Anwendung.

    Ich fürchte, auf das schicke fadeIn werde ich wohl in absehbarer Zeit verzichten müssen (vielleicht gehts ja mit einem der nächsten jQuery Updates).

    Meine Lösung wird bis dahin css("display","table-row") heißen.

    Vielen Dank für Eure Unterstützung!
     

  14. #14
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    schmeiss nicht gleich die Flinte ins Korn. jQuery bietet ja noch die Methode animate. Damit funktioniert es bei mir auch im IE 8.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    $(document).ready(function() {
      $("input#meineCheckbox").click(function(){
        if($(this).is(":checked"))
          $("tr.ausgeblendeteZeile td").animate({opacity: 1}, 1000);
        else
          $("tr.ausgeblendeteZeile td").animate({opacity: 0}, 1000);
      });
    });
     
    $(function(){
      $("tr.ausgeblendeteZeile td").css({opacity: 0});
    });

    Die Eigenschaft display: none habe ich im Gegenzug aus der CSS-Klasse genommen.

    Ciao
    Quaese
    Sven Mintel bedankt sich. 
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  15. #15
    NM78 NM78 ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    24
    Naja, aber ohne display:none lässt er im IE dort wo vorher die Zeilen waren einfach eine leere Box zurück d.h. die Tabelle wird nicht verkürzt.

    Das hier würde gehen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    $(document).ready(function() {
      $("input#meineCheckbox").click(function(){
        if($(this).is(":checked"))
          $("tr.ausgeblendeteZeile td").css("display","table-row");
          $("tr.ausgeblendeteZeile td").animate({opacity: 1}, 1000);
        else
          $("tr.ausgeblendeteZeile td").animate({opacity: 0}, "slow",function(){$("tr.ausgeblendeteZeile td").css("display","none");});
      });
    });

    Leider werden dabei diesmal im Firefox beim Einblenden nicht mehr die korrekten Spaltenabstände angezeigt.

    Wie man es dreht und wendet...
     

Ähnliche Themen

  1. JQuery - Geschwisterelemente ausblenden...
    Von SonMiko im Forum Javascript & Ajax
    Antworten: 8
    Letzter Beitrag: 26.08.10, 14:23
  2. JQuery: Inhalt ein- und ausblenden
    Von yany im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 26.05.10, 08:44
  3. [jQuery] ausblenden, was nicht da ist
    Von klanawagna im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 26.05.10, 08:26
  4. jQuery - DIV ein/ausblenden in Tabelle
    Von holly123 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 04.10.09, 17:39
  5. Ein- und Ausblenden mit jQuery
    Von GN911 im Forum Javascript & Ajax
    Antworten: 12
    Letzter Beitrag: 13.05.09, 11:14

Stichworte