Verweis mit Variabeln und Anker wird fehlinterpretiert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verweis mit Variabeln und Anker wird fehlinterpretiert

    Ich habe jetzt eine ganze Weile nach einer schon vorhandenen Lösung für mein Problem gesucht, sie jedoch nicht gefunden (ich hoffe, das ich sie nicht überlesen habe.) Dem entsprechend schildere ich hier nun mein Problem:

    Auf der Seite example.net/neu/?section=Kontakt befindet sich folgender Verweis:

    HTML-Code:
    <a href="?section=Impressum#Datenschutz">Datenschutz</a>
    auf der Seite example.net/neu/?section=Impressum ist der Anker wie folgt definiert:

    HTML-Code:
    <h3><a name="Datenschutz"></a>Datenschutz</h3>
    Wenn ich in der Adresszeile #Datenschutz an die URL des Impressums dranhänge, springt der Browser wie gewollt nach unten zum Anker.

    Wenn ich auf der Kontakt-Seite (siehe oben) mit der Maus über den wie oben definierten Link fahre, wird mir die Ziel-URL in den Element-Eigenschaften als auch in der Info-Zeile am unteren Ende des Browserfensters (Firefox 3.5.5) korrekt mit example.net/neu/?section=Impressum#Datenschutz angezeigt.

    Sobald ich jedoch darauf klicke passiert folgendes:
    statt die korrekte URL aufzurufen, wird

    example.net/neu/?section=Kontakt[COLOR=Red]#[/COLOR]?section=Impressum#Datenschutz aufgerufen.
    Ergo wird nicht die Seite mit dem Impressum aufgerufen, sondern ein nicht vorhandener Anker mit dem Namen ?section=Impressum#Datenschutz angesteuert.

    Bisher versuchte Ansätze:
    # mit & # 35 ; kodieren -> macht keinen Unterschied (was zu erwarten war, aber ein Versuch war es dennoch wert )
    Verweis absolut statt relativ definieren -> kein Unterschied (außer das dann der fehlinterpretierte Anker die komplette URL statt der kürzeren relativen Angabe als Name erhält)
    Hinweis:

    Sämtliche Seiten werden nach dem Template-System aus dem Quake.net-Tutorial (Quakenet/#php Tutorial - de - Templatesystem) über die index.php Datei aufgerufen.

    Danke schonmal im Vorraus für die kommenden Antworten!

    MfG

    Kaytir
    Zuletzt geändert von Kaytir; 09.12.2009, 15:03.

  • #2
    Hallo,

    machst du in den Verweisen irgendwas mit JavaScript? Passiert das auch noch, wenn du JS temporär deaktivierst?

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hi Amica!

      Ja, wenn ich das JavaScript deaktiviere gehts ...

      folgendes verwende ich auf manchen Seiten:

      HTML-Code:
      <script type="text/javascript" src="http://www.google.com/jsapi"></script>
      <script type="text/javascript">  google.load("jquery", "1.3.2");</script>
      und folgende 2 Dateien, die ich einbinde:

      Datei 1:
      HTML-Code:
      $(document).ready(function() {
          $('a[href*=#]').bind("click", function(event) {
              event.preventDefault();
              var ziel = $(this).attr("href");
      
              $('html,body').animate({
                  scrollTop: $(ziel).offset().top
              }, 1000 , function (){location.hash = ziel;});
      });
      return false;
      });
      Datei 2:
      HTML-Code:
      $(function()
          {
              $('.eintrag').hide();
              $('.post>.titel').click(function()
              {
                  $(this).next('.eintrag').slideToggle().parent().siblings('div').
                  find('.eintrag:visible').slideUp();
              });
          });
      Vermutlich liegt das Kind in der ersten Datei begraben?

      EDIT: Wo ist mein Code denn 11 Zeichen zu lang? ....
      Zuletzt geändert von Kaytir; 09.12.2009, 15:04.

      Kommentar


      • #4
        Es liegt an
        Code:
        location.hash = ziel;
        Die hash-Eigenschaft des location-Objekts legt nur den Verweisanker fest. Nimm stattdessen
        Code:
        location.href = ziel;
        Edit: die ganze Datei1 erscheint mir sinnlos, da sie genau das zu machen versucht, was der Browser ohnehin macht. Kann das sein?
        Zuletzt geändert von AmicaNoctis; 09.12.2009, 15:09.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Super, ich danke dir für die schnelle Hilfe!

          EDIT: Die Datei ist für einen Scroll-Effekt verantwortlich, denn durch den Code wird statt zum anker zu springen weich dorthin gescrollt

          Kommentar


          • #6
            Dein Code ist nirgends zu lang. Wenn das Bild immer noch angezeigt wird, lade mal bitte die Seite mit Strg+F5 neu. Wenn es dann immer noch da ist, wäre ich dankbar für eine Rückmeldung mit Browserinfos (Name, Version, Betriebssystem).

            Edit: Achso, dann musst du die Variable Ziel aber erstmal aufdröseln und erst zur entspr. Seite springen (alles vor dem #) und danach dein Smooth Scrolling nur mit dem Verweisanker (alles ab dem #) aufrufen. Geht aber nur innerhalb eines Frames, sonst ist das Script ja bereits weg. Oder du machst das nur, wenn du auf der aktuellen Seite bleibst (ziel muss mit # beginnen).
            Zuletzt geändert von AmicaNoctis; 09.12.2009, 15:16.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Datei 1 soll vermutlich das anspringen eines Ankers (auf der aktuellen Seite) etwas "smoother" machen. Da wird nicht mehr gesprungen sondern sanft gescrollt.
              Wenn aber nun bei $().animate(options, duration, callback) im Callback location.href neu belegt wird, wird der Browser die Seite neu laden. Das hat er vorher nicht gemacht und es macht das Scrolling auch überflüssig.

              Es liegt nun nahe, location.href nicht neu zu belegen um keinen Reload auszulösen. Würde ja genügen, location.hash und location.search zu verändern.
              Aber das bekommt vielleicht die Browserhistory nicht mit ... so kastriert man die Vor- und Zurück-Buttons.
              Es wäre besser, wenn der onClick-Handler nur an solche Links gebunden wird, die garantiert auf der aktuellen Seite springen. Das wären die, die nur aus "#Ankername" bestehen oder aus "<aktuelleURI>#Ankername".
              Zuletzt geändert von onemorenerd; 09.12.2009, 15:21.

              Kommentar


              • #8
                Das Bild ist nicht mehr zu sehen

                Ich habe meinen Post zwar anschließend nochmal editiert, aber nicht innerhalb von Code-Tags ...

                Danach war die Grafik nimmer zu sehen.

                EDIT: Ist denn irgendein Fehler in dem JavaScript, denn die gewünschte Funktion wird jetzt nach der oben von Amica angeregten Veränderung noch immer tadellos ausgeführt und auch mein Problem ist damit gelöst ...
                Zuletzt geändert von Kaytir; 09.12.2009, 15:17.

                Kommentar


                • #9
                  Zitat von Kaytir Beitrag anzeigen
                  Das Bild ist nicht mehr zu sehen
                  Danke für die Rückmeldung, dann war es nur der übliche kleine Browser-Cache-Hänger.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    @onemorenerd:

                    Also muss ich den Selektor
                    Code:
                    'a[href*=#]'
                    in dem Script ändern? Wie kann ich denn allgemein gültig definieren, das nur dann Anker-Verweise akzeptiert / berücksichtigt werden, wenn sie auf Ziele im selben (variablen!) Dokument verweisen?

                    Ich habe diesen Code-Schnipsel selbst nur übernommen ( Animiertes Scrollen mit jQuery | jQuery, Links, Maus | Dr. Web Magazin ), da ich von JavaScript sogut wie keine Ahnung habe ...

                    Kommentar


                    • #11
                      a[href*=#]
                      passt auf alle, die ein # enthalten. Wenn du
                      a[href^=#]
                      benutzt, nimmt er nur die, die mit # anfangen, also seiteninterne.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        damit wäre das dann auch geklärt, danke!

                        Kommentar


                        • #13
                          Eventuell musst du auch solche Hrefs matchen, die mit de aktuellen URI beginnen und mit einem Anker enden.

                          Beispiele: Auf der Seite http://example.com/path/to/foo.php?arg=value befinden sich folgende Links:
                          href="http://example.com/path/to/foo.php?arg=value#anchor"
                          href="example.com/path/to/foo.php?arg=value#anchor"
                          href="/path/to/foo.php?arg=value#anchor"
                          href="../to/foo.php?arg=value#anchor"
                          href="../../path/to/foo.php?arg=value#anchor"
                          href="./foo.php?arg=value#anchor"
                          href="?arg=value#anchor"
                          ... (Aufzählung unvollständig! Wenn die Datei index.php heißt ...)

                          Die erwischst du mit a[href^=#] alle nicht.

                          Es ist auch gar nicht so einfach, alle Möglichkeiten abzudecken. Aber wenn du alle URLs/Links per Code erzeugst, sie also nicht manuell eingibst, kannst du bestimmt sicherstellen, dass bestimmte Fälle nie auftreten. Wenn es z.B. nur vollständige absolute und vollständige relative URLs gibt, kannst du das ins Matching einbauen. Anderenfalls würde ich eher den umgekehrten Weg gehen und die Hrefs nicht matchen, die nicht mit # beginnen. So matchst du zwar u.U. zu wenige, aber das ist immer noch besser als zu viele.
                          Zuletzt geändert von onemorenerd; 09.12.2009, 16:53.

                          Kommentar


                          • #14
                            Also alle generierten Links auf den Seiten, bei denen dieses soft-scrolling zum Einsatz kommen werden ähnlich (nur komprimiert, da alle anderen Daten aus dem array für dieses Thema irrelevant sind) diesem Beispiel erstellt und verweisen niemals auf andere Seiten:

                            PHP-Code:
                            foreach ($foo['id'] as $i -> $v) {
                                echo 
                            '<a href="#'.$foo['ankername'][$i].'">'.$foo['titel'][$i].'</a>';

                            Sämtliche sonst von mir gesetzten oder generierten Links folgen strikt dem Schema:
                            Zitat von onemorenerd Beitrag anzeigen
                            href="?arg=value#anchor"
                            wobei bis auf eine Ausnahme, die mich zu meinem Problem geführt hat, alle ohne Anker auskommen.

                            Somit ist a[href^=#] in meinem Falle, denke ich, völlig ausreichend.

                            Sollte ich dann doch irgendwann an Grenzen stoßen, werde ich deinen Hinweis ganz bestimmt beachten und bei nicht selbst lösbaren Problemen nochmal auf dich zukommen!

                            Deshalb danke für deine Info's!

                            Grüße

                            Kaytir

                            Kommentar

                            Lädt...
                            X