ingobar: Fehler/Warnunge in jQuery etc.

Nochmals hallo,

ich bin gerade dabei zum ersten Mal jQuery und die ganzen PlugIns etc voll zu nutzen und bin gerade total genervt, dass jQuery ohne Ende Warnungen etc im Firefox bei mir produzieren. Ist das normal? Muss man damit leben? Ich finde nämlich vor lauter Meldungen meine eigenen Warnungen und Fehler nicht mehr. Ich kann zwar auch nur die Fehler anzeigen lassen, aber irgendwie finde ich es halt frustrierend.

Gibt es bessere, also Pakete "ohne" Fehler/Warnunge? Oder kommen die Warnungen daher, dass diese komplexen Pakete für viele unterschiedliche Browser geschrieben wurden?

Wäre dankbar für eine Meinung,

ingobar

  1. ich bin gerade dabei zum ersten Mal jQuery und die ganzen PlugIns etc voll zu nutzen und bin gerade total genervt, dass jQuery ohne Ende Warnungen etc im Firefox bei mir produzieren.

    Viele der meheren tausend Plugins die für jQuery existieren sind überholt, inkompatible zu aktuellen Versionen oder schlichtweg durch Core-Funktionen ersetzt. Ich würde dir also davon abraten, "die ganzen Plug-Ins" zu nutzen ;)

    Ist das normal?

    Nein, du machst etwas falsch.

    Muss man damit leben?

    Wenn du damit leben kannst - müssen tust du aber nicht.

    Gibt es bessere, also Pakete "ohne" Fehler/Warnunge?

    Welches "Paket" verwendest du denn aktuell=

    Oder kommen die Warnungen daher, dass diese komplexen Pakete für viele unterschiedliche Browser geschrieben wurden?

    jQuery ist natürlich sehr Browserspezifisch geschrieben - das ist aber erforderlich, da eben genau das den Vorteil eines Frameworks darstellt: eine einheitliche Schnittstelle zur Manipulation des Dokuments ohne die Eigenheiten der verschiedenen Browser selbst beachten oder kennen zu müssen.

    jQuery ist aber so sauber verfasst, dass es keine Warnungen oder Fehler in den kompatiblen Browsern wirft.

    Der logische Schluss: du machst etwas falsch.

    1. Viele der meheren tausend Plugins die für jQuery existieren sind überholt, inkompatible zu aktuellen Versionen oder schlichtweg durch Core-Funktionen ersetzt. Ich würde dir also davon abraten, "die ganzen Plug-Ins" zu nutzen ;)

      Ist das normal?

      Nein, du machst etwas falsch.

      Aha. Okay, vielleicht zeige ich mal,was ich mache.

      Ich benuzte das superfish-Menu-Plugin in dem ich es so einbinde:

        
        
      <link rel="stylesheet" type="text/css" href="superfish/css/superfish.css" media="screen">  
      	<script type="text/javascript" src="superfish/js/jquery-1.2.6.min.js"></script>  
      	<script type="text/javascript" src="superfish/js/hoverIntent.js"></script>  
      	<script type="text/javascript" src="superfish/js/superfish.js"></script>  
      	<script type="text/javascript">  
        
      	// initialise plugins  
      	jQuery(function(){  
      		jQuery('ul.sf-menu').superfish();  
      	});  
        
      	</script>  
        
      
      

      Das eigentlich Menü sieht dann z.B. so aus (nur der Anfang):

        
        
      <div id="navigation" >  
      	<ul class="sf-menu">  
      			<li>  
      				<a href="books.php">Bücher</a>  
      				<ul>  
        
      					<li><a href="add_book.php">Hinzufügen</a></li>  
      					<li><a href="del_book.php">Entfernen</a></li>  
      					<li><a href="new_bookstack.php">Neuer Bücherstapel</a></li>  
      					<li><a href="edit_bookstack.php">Bücherstapel ändern</a></li>  
      					<li><a href="del_bookstack.php">Bücherstapel löschen</a></li>  
      				</ul>  
        
      			</li>  
      
      

      Die Warnungen, die ich bekomme sehen so aus:

      Mehrfach hintereinander:

      Warnung: reference to undefined property n.cache[G][D]
      Quelldatei: http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js
      Zeile: 12

      Am häufigsten die Meldung:

      Warnung: reference to undefined property event[expando]
      Quelldatei: http://localhost/~ingo/buecherei/superfish/js/jquery-1.2.6.min.js
      Zeile: 26

      Dann die Meldung:

      Warnung: variable val redeclares argument
      Quelldatei: http://forum.de.selfhtml.org/jquery-1.2.1-slightly-minified.js
      Zeile: 233, Spalte: 4
      Quelltext:
      var val = jQuery.browser.msie && !option.attributes["value"].specified ? option.text : option.value;

      Oder auch

      Warnung: anonymous function does not always return a value
      Quelldatei: http://forum.de.selfhtml.org/jquery-1.2.1-slightly-minified.js
      Zeile: 259, Spalte: 2
      Quelltext:
      },

      Warnung: anonymous function does not always return a value
      Quelldatei: http://forum.de.selfhtml.org/jquery-1.2.1-slightly-minified.js
      Zeile: 1581, Spalte: 7
      Quelltext:
      return xml;

      Warnung: reference to undefined property this[num]
      Quelldatei: http://forum.de.selfhtml.org/jquery-1.2.1-slightly-minified.js
      Zeile: 61

      Bei der Gelegenheit habe ich auch ein paar Warnung von diesem Forum gesehen:

      Warnung: char is a reserved identifier
      Quelldatei: http://forum.de.selfhtml.org/bbcode.js
      Zeile: 175, Spalte: 85
      Quelltext:
         var newQueryPart = queryPart.replace(/[^a-z0-9;/?:@&=+$,-_.!~*'()%]/gi, function (char) {

      Warnung: char is a reserved identifier
      Quelldatei: http://forum.de.selfhtml.org/bbcode.js
      Zeile: 176, Spalte: 30
      Quelltext:
          return encodeURIComponent(char);

      Das meiste ist also eine Warnung in Bezug auf jQuery selbst. Wie sollte ich jetzt weiter vorgehen?

      Falls es eine Rolle spielt noch die Info, dass ich unter OSX 10.6 mit Firefox 3.5.10 und Safari 5 entwickle.

      Danke für eventuelle Tipps,

      ingobar

      1. Aha. Okay, vielleicht zeige ich mal,was ich mache.

        Ich benuzte das superfish-Menu-Plugin in dem ich es so einbinde:

        Wozu? Das Ding kann nichts, was du nicht mit jQuery-Core-Funktionen einfacher, schneller und zuverlässiger erreichen könntest - zudem verwendest du jQuery 1.2.x - das ist antik (von 2008). Aktuell ist 1.4.2.

        <link rel="stylesheet" type="text/css" href="superfish/css/superfish.css" media="screen">
        <script type="text/javascript" src="superfish/js/jquery-1.2.6.min.js"></script>
        <script type="text/javascript" src="superfish/js/hoverIntent.js"></script>
        <script type="text/javascript" src="superfish/js/superfish.js"></script>
        <script type="text/javascript">

        // initialise plugins
        jQuery(function(){
        jQuery('ul.sf-menu').superfish();
        });

        </script>

        
        >   
        > Das eigentlich Menü sieht dann z.B. so aus (nur der Anfang):  
          
        
        > 	<ul class="sf-menu">  
          
        
        > Das meiste ist also eine Warnung in Bezug auf jQuery selbst. Wie sollte ich jetzt weiter vorgehen?  
          
        Schmeiss' diese Klasse sf-menu raus, die brauchst du nicht #navigation>ul selektiert deine Navigation genauso eindeutig.  
          
        Schmeiss Superfish weg und arbeite - wenn du mit css allein nicht klarkommst - je nach gewünschtem Effekt z.B. mit hover() oder toggle() sowie animate().  
          
        Binde ein aktuelles jQuery ein.  
          
        Erstelle ein modernes Menü auf Basis von HTML und CSS unter zuhilfenahme der :hover-Pseudoklasse.  
          
        Manipuliere das Menü dann mittels JavaScript/jQuery um anstatt des harten ein/ausklappens mittels :hover lieber entsprechende Effekte zu verwenden.  
          
        Das hier sollte für ein einfaches Menü bereits völlig ausreichen und ist entsprechend ausbaufähig - natürlich nicht getestet :)  
        ~~~javascript
        jQuery(#navigation>ul li).hover(  
          function() {  
            jQuery('ul', this).show();  
          },  
          function() {  
            jQuery('ul', this).hide();  
          },  
        );
        

        Falls es eine Rolle spielt noch die Info, dass ich unter OSX 10.6 mit Firefox 3.5.10 und Safari 5 entwickle.

        Sollte eigentlich keine Probleme bereiten.

        1. Erstelle ein modernes Menü auf Basis von HTML und CSS unter zuhilfenahme der :hover-Pseudoklasse.

          Manipuliere das Menü dann mittels JavaScript/jQuery um anstatt des harten ein/ausklappens mittels :hover lieber entsprechende Effekte zu verwenden.

          Das hier sollte für ein einfaches Menü bereits völlig ausreichen und ist entsprechend ausbaufähig - natürlich nicht getestet :)

          jQuery(#navigation>ul li).hover(

          function() {
              jQuery('ul', this).show();
            },
            function() {
              jQuery('ul', this).hide();
            },
          );

            
          Ich habe das jetzt soweit wie es geht mit css selber gemacht. Habe allerdings das Problem, dass beim Ausklappen des Menüs der darunterliegende content nach unten geschoben wird. Ich habe jetzt schon mit z-index versucht was zu machen, aber das auch nicht geklappt.  
            
          ~~~css
            
          ul#main-nav {  
          	font-family:helvetica,arial,sans-serif;  
          	margin:0; padding:0;  
          	float:left;  
          	width:100%;  
          	background:#f00;  
          }  
            
          ul#main-nav li {  
          	margin:0;padding:0;  
          	list-style:none;  
          	float:left;  
          	margin:0 0.3em 0 0;  
          	width:9em;  
          }  
            
          ul#main-nav li a {  
          	text-decoration:none;  
          	display:block;  
          	padding:0.3em 0.5em;  
          	color:#003;  
          	background:#fff;  
          }  
            
          ul#main-nav li ul li a:hover, ul#main-nav li ul li a:focus {  
          	color:#000;  
          	background:#efefef;  
          }  
            
          ul#main-nav li ul {  
          	padding:0;  
          	display:none;  
          }  
            
          ul#main-nav li:hover ul {  
          	display:block;  
          }  
            
          ul#main-nav li ul li {  
          	float:none;  
          }  
            
          ul#main-nav li ul li a {  
          	font-size:0.9em;  
          }  
            
          
          

          ingobar

          1. Habe allerdings das Problem, dass beim Ausklappen des Menüs der darunterliegende content nach unten geschoben wird. Ich habe jetzt schon mit z-index versucht was zu machen, aber das auch nicht geklappt.

            Ggf. fehlt dir noch an entscheidender Stelle eine position-Eigenschaft.

            Guck dir mal die <http://de.selfhtml.org/css/layouts/navigationsleisten.htm@title=Beispiele auf dieser Seite an>.

            1. Ggf. fehlt dir noch an entscheidender Stelle eine position-Eigenschaft.

              Guck dir mal die <http://de.selfhtml.org/css/layouts/navigationsleisten.htm@title=Beispiele auf dieser Seite an>.

              So weit ich mir das angeschaut habe, werden da die aufgeklappten Menüs mit position:absolute gesetzt. Ist das nicht im Widerspruch dazu möglichst nicht mit absoluter Positionierung zu arbeiten? Das stand irgendwann mal hier im Forum.

              1. So weit ich mir das angeschaut habe, werden da die aufgeklappten Menüs mit position:absolute gesetzt. Ist das nicht im Widerspruch dazu möglichst nicht mit absoluter Positionierung zu arbeiten? Das stand irgendwann mal hier im Forum.

                Beim allgemeinen Layout - also da wo du mit dynamischen Textmengen oder vergleichbarem arbeitest, solltest du mit absoluter Positionierung sparsam umgehen, da diese Art der Positionierung den Textfluss (für einen Anfänger teilweise unkontrollierbar) beeinflusst.

                Bei einem Drop-Down-Menü ist es aber gerade das was du brauchst: du willst das Untermenü ausserhalb des Textflusses anzeigen, die restlichen Menüelemente sollen sich nicht verschieben.

      2. Moin!

        Ist das normal?

        Nein, du machst etwas falsch.

        Aha. Okay, vielleicht zeige ich mal,was ich mache.

        Du benutzt eingebunden jQuery Version 1.2.6. Die ist alleine schon mal uralt.

        <script type="text/javascript" src="superfish/js/jquery-1.2.6.min.js"></script>

        Deine Fehlermeldungen enthalten Hinweise auf die jQuery-Versionen 1.3.0, 1.2.6 oder 1.2.1. Offenbar binden sich einzelne Teile des Javascripts, das du verwendest, selbst eigene jQuery-Versionen mit ein. Das kann in der Kombination nur zu Murks führen.

        Siehe z.B.

        Quelldatei: http://forum.de.selfhtml.org/jquery-1.2.1-slightly-minified.js

        Es ist übrigens nicht so nett, wenn du dieses jQuery von unserem Server aus einbindest. Erstens: Das kann sich jederzeit einfach ändern, zweitens stiehlt es unseren Traffic, und den haben wir nicht unbegrenzt. Also ändere das bitte.

        - Sven Rautenberg

        1. Es ist übrigens nicht so nett, wenn du dieses jQuery von unserem Server aus einbindest. Erstens: Das kann sich jederzeit einfach ändern, zweitens stiehlt es unseren Traffic, und den haben wir nicht unbegrenzt. Also ändere das bitte.

          Wenn man das File nicht selbst hosten möchte, bietet sich immer noch die Möglichkeit, die Sache über ein CDN einzubinden. Die gibt's kostenpflichtig z.B. von Akamai (wenn man beliebige Files benötigt) oder für spezielle Fälle schon mal vorsorglich von Branchengrößen wie etwa Google:
          jQuery bei code.google.com

          1. Auch hier nochmal: Ich habe nichts eingebunden. Es ist die ganz normale Benutzung der selfhtml-Seite, die diese Warnungen produzieren.

            Man braucht doch nur den Code anschauen, um zu sehen, dass ihr das selbst benutzt. Finde ich dann doch heftig, dass man hier gleich mit solchen Vorwürfen konfrontiert wird.

            ingobar

            1. Auch hier nochmal: Ich habe nichts eingebunden. Es ist die ganz normale Benutzung der selfhtml-Seite, die diese Warnungen produzieren.

              Warum postest du dann die Fehlermeldungen die du im Forum erhältst im Zusammenhang mit deinem Menü - das ist verwirrend.

              Man braucht doch nur den Code anschauen, um zu sehen, dass ihr das selbst benutzt. Finde ich dann doch heftig, dass man hier gleich mit solchen Vorwürfen konfrontiert wird.

              Siehe oben - es geht aus deinem Posting imho nicht hervor, dass es sich um die Fehlermeldungen einer anderen Seite (nicht deiner) handelt.

              btw: don't blame me :) ich hab' mit SELFHTML nichts am Hut, ich bin hier Gast - genauso wie du.

              1. 'ǝɯɐu$ ıɥ

                Warum postest du dann die Fehlermeldungen die du im Forum erhältst im Zusammenhang mit deinem Menü - das ist verwirrend.

                weil ihm wohl nicht klar ist das die konsole alle fehler aller offenen tabs anzeigt.

                ssnɹƃ
                ʍopɐɥs

                --
                I like children. If they're properly cooked.
                - W.C. Fields
                1. weil ihm wohl nicht klar ist das die konsole alle fehler aller offenen tabs anzeigt.

                  Das dürfte aber mit dem verwendeten Browser zu tun haben :)

                  1. 'ǝɯɐu$ ıɥ

                    weil ihm wohl nicht klar ist das die konsole alle fehler aller offenen tabs anzeigt.

                    Das dürfte aber mit dem verwendeten Browser zu tun haben :)

                    er schrubtete ja auch firefox, und hätten alle richtig gelesen, hätt ich mich nicht solange amüsieren können :-))

                    ssnɹƃ
                    ʍopɐɥs

                    --
                    I like children. If they're properly cooked.
                    - W.C. Fields
                    1. er schrubtete ja auch firefox, und hätten alle richtig gelesen, hätt ich mich nicht solange amüsieren können :-))

                      Jetzt muss ich auch nochmal was dazu sagen.

                      Ich mag ja wenig Erfahrung haben, was jQuery und css in allen Tiefen und Untiefen anbelangt. Vor allem mit jQuery kenne ich mich noch gar nicht aus. Aber dennoch weiß ich sehr wohl, welche Meldungen durch welches Fenster oder Tab angezeigt werden. Und wenn der Firefox bei nur einem Fenster und neuladen der selfhtml-Forums-Seite 13 Warnungen anzeigt, kann ich auch nichts dafür. Als Quelldatei wird dabei immer forum.de.selfhtml.org und dann die entsprechende js-Datei angezeigt: Das ist die bbcode.js-, forum.js- und jquery-1.2.1-slightly-minified.js - Datei.

                      ingobar

                      1. Und wenn der Firefox bei nur einem Fenster und neuladen der selfhtml-Forums-Seite 13 Warnungen anzeigt, kann ich auch nichts dafür.

                        Das Problem ist, dass die niemand anders sieht. Hast du ein Greasemonkey Skript oder sowas im Hintergrund laufen? Von selfhtml kommen diese warnungen nicht.

                        Struppi.

                      2. 'ǝɯɐu$ ıɥ

                        Ich mag ja wenig Erfahrung haben, was jQuery und css in allen Tiefen und Untiefen anbelangt. Vor allem mit jQuery kenne ich mich noch gar nicht aus. Aber dennoch weiß ich sehr wohl, welche Meldungen durch welches Fenster oder Tab angezeigt werden. Und wenn der Firefox bei nur einem Fenster und neuladen der selfhtml-Forums-Seite 13 Warnungen anzeigt, kann ich auch nichts dafür. Als Quelldatei wird dabei immer forum.de.selfhtml.org und dann die entsprechende js-Datei angezeigt: Das ist die bbcode.js-, forum.js- und jquery-1.2.1-slightly-minified.js - Datei.

                        Dann verstehe ich dein Problem nicht: wenn du die anderen Fehlermeldungen nicht haben willst, mußt du die Seite(n) schließen oder ein anderes Werkzeug zum Debuggen benutzen. Das auf anderen Seiten Fehler produziert werden (warum auch immer) kannst du nicht ändern, alternativ kannst du ja auch eine Mail an den Seitenbetreiber senden, man möge doch bitte die Fehler abstellen weil sie dich beim debuggen stören ;-)

                        Du hast ja im Eingansposting nach anderen Paketen gefragt (fehlerfreie), jeder geht davon aus das du deine meinst und nicht die anderer Seiten die außerhalb deiner Reichweite liegen.

                        ich bin gerade dabei zum ersten Mal jQuery und die ganzen PlugIns etc voll zu nutzen und bin gerade total genervt, dass jQuery ohne Ende Warnungen etc im Firefox bei mir produzieren. Ist das normal?

                        Gibt es bessere, also Pakete "ohne" Fehler/Warnunge? Oder kommen die Warnungen daher, dass diese komplexen Pakete für viele unterschiedliche Browser geschrieben wurden?

                        ssnɹƃ
                        ʍopɐɥs

                        --
                        I like children. If they're properly cooked.
                        - W.C. Fields
                      3. Ich kanns immer noch nicht nachvollziehen - aber seis drum - ist ja nicht so wichtig.

                        Ggf. ist es irgend ein Add-On, ein User-Script oder ein Werbeblocker welcher unkontrollierbares verhalten hervorruft.

                        1. Ich kanns immer noch nicht nachvollziehen - aber seis drum - ist ja nicht so wichtig.

                          er hat den strict Modus an

                          Struppi.

                          1. er hat den strict Modus an

                            Hab' ich schon gelesen, danke dennoch für den Hinweis.

        2. Siehe z.B.

          Quelldatei: http://forum.de.selfhtml.org/jquery-1.2.1-slightly-minified.js

          Es ist übrigens nicht so nett, wenn du dieses jQuery von unserem Server aus einbindest. Erstens: Das kann sich jederzeit einfach ändern, zweitens stiehlt es unseren Traffic, und den haben wir nicht unbegrenzt. Also ändere das bitte.

          • Sven Rautenberg

          Guten Morgen,

          ich habe überhaupt nichts eingebunden. Das ist die Warnung, die ich erhalte, wenn ich das Forum anzeigen lasse. Alleine beim Aufrufen dieser Seite habe ich mehrfach diese Meldung bekommen.

          ingobar

          1. Alleine beim Aufrufen dieser Seite habe ich mehrfach diese Meldung bekommen.

            Ich erhalte da keine Fehlermeldungen.

            1. Alleine beim Aufrufen dieser Seite habe ich mehrfach diese Meldung bekommen.

              Ich erhalte da keine Fehlermeldungen.

              Ich spreche hier nicht von Fehler, sondern nur von Warnungen!

              1. Ich spreche hier nicht von Fehler, sondern nur von Warnungen!

                Auch solche bekomme ich nicht in meiner "Fehler"-Konsole.

      3. ergänzend zu meinem anderen Posting

        Oder auch

        Warnung: anonymous function does not always return a value
        Quelldatei: http://forum.de.selfhtml.org/jquery-1.2.1-slightly-minified.js
        Zeile: 259, Spalte: 2
        Quelltext:
        },

        Das sind Warnungen im strict Modus, den du explizit eingeschaltet haben musst. warum du da besser drauf verzichtest, beschreibt diese Seite.

        Es gibt wirklich fast kein skript, das strict ist und keine warnungen wirft.

        Struppi.

        1. Es gibt wirklich fast kein skript, das strict ist und keine warnungen wirft.

          Struppi.

          Okay, das kannte ich nicht. Ist auch nicht wirklich das, was man so im Vorbeigehen als Hobby-Programmierer so mitkriegt. Ich habe das strict jetzt auf false und schon sind die Meldungen weg.

          Aber immer irgendwie bleibt da immer noch ein komisches Gefühl zurück. Denn die Probleme sind ja immer noch da, ich lasse sie nur nicht mehr anzeigen.

          ingobar

          1. Aber immer irgendwie bleibt da immer noch ein komisches Gefühl zurück. Denn die Probleme sind ja immer noch da, ich lasse sie nur nicht mehr anzeigen.

            du hast den Artikel gelesen, den ich dir verlinkt habe?

            Auch wenn er älter ist, trifft er den Kern. strict ist in anderen Programmiersprachen sinnvoll - ich programmiere viel in Perl, dort ist use strict das erste was ich schreibe, wenn ich ein neues Programm anfange - aber in Javascript schießt es über das Ziel hinaus. Diese Warnungen sind keine Probleme.

            Struppi.