Thomas: Mehrfaches Klicken auf Textmarken

Hallo,

Ich bin gerade dabei ein Browsergame zu programmieren.
Auf einer Seite soll es möglich sein, seinen Boxer in bestimmten Fähigkeiten zu verbessern.

Da vor den Fähigkeiten des Boxers zunächst einmal die Basisdaten (Name, Alter usw.) des Boxers eingeblendet werden und erst darunter die Fähigkeiten inkl. Verbesserungs-Möglichkeit, habe ich beim Klick auf "Verbessern" eine Textmarke eingebaut.

Hier der HTML-Code:

  
<h6 style="text-align:center;"><a name="Verbessern">Die Fähigkeiten:</a></h6>  
<p>Um eine bestimmte Fähigkeit zu verbessern, musst du einfach hinter der entsprechenden Fähigkeit auf "verbessern" klicken.</p>  
<table class="rahmen" align="center">  
<tr>  
<td>Aggressivität:</td>  
<td>10</td>  
<td><a href="boxerverbessern.php?BoxerID=123&Skill=aggressiv#Verbessern">verbessern</a></td>  
<td align="center" width="50px">&nbsp;</td>  
<td>Agilität:</td>  
<td>11</td>  
<td><a href="boxerverbessern.php?BoxerID=123&Skill=agil#Verbessern">verbessern</a>  
</td>  
</tr>  
<tr>  
<td>Ausdauer:</td>  
<td>10</td>  
<td><a href="boxerverbessern.php?BoxerID=123&Skill=ausdauer#Verbessern">verbessern</a></td>  
<td align="center" width="50px">&nbsp;</td>  
<td>Immunität (gegen Verletzungen):</td>  
<td>10</td>  
<td><a href="boxerverbessern.php?BoxerID=123&Skill=immunitaet#Verbessern">verbessern</a></td>  
</tr>  
</table>  

Beim ersten Klick auf "Verbessern" funktioniert das wunderbar:

  • die PHP-Seite lädt sich neu, der Boxer wird verbessert, und man springt direkt zur Textmarke

Danach passiert allerdings folgendes:

  • klicke ich anschließend auf einen anderen Link (der zwar auf die selbe URL führt, aber einen anderen Skill-Parameter übergibt), so funktioniert es erneut => Seite wird neu geladen, Boxer wird in der gewählten Fähigkeit verbessert und man springt wieder zur Textmarke
  • klicke ich aber zweimal hintereinander auf den gleichen Link, so passiert nichts beim Anklicken des Links => die Seite wird nicht neu geladen und der Boxer somit nicht verbessert

Hat jemand eine Idee woran das liegen könnte?
Ist es denn nicht möglich, zweimal hintereinander die gleiche Textmarke anzuklicken?

Vielen Dank vorab für alle hilfreichen Beiträge!

Mit freundlichen Grüßen,
Thomas

  1. Hi,

    <h6 style="text-align:center;"><a name="Verbessern">Die Fähigkeiten:</a></h6>

    Wozu das a-Element? Den Fragment identifier kannst Du auch als id im h6 unterbringen.

    <td><a href="boxerverbessern.php?BoxerID=123&Skill=aggressiv#Verbessern">verbessern</a></td>

    Das & in der URL muß als &amp; notiert werden.

    <td><a href="boxerverbessern.php?BoxerID=123&Skill=agil#Verbessern">verbessern</a>
    <td><a href="boxerverbessern.php?BoxerID=123&Skill=ausdauer#Verbessern">verbessern</a></td>
    <td><a href="boxerverbessern.php?BoxerID=123&Skill=immunitaet#Verbessern">verbessern</a></td>

    Beim ersten Klick auf "Verbessern" funktioniert das wunderbar:

    weil sich dadurch nicht nur der fragment identifier ändert, sondern auch die der Rest der URL (Skill-Parameter). Also fordert der Browser das Dokument erneut an.

    Danach passiert allerdings folgendes:

    • klicke ich anschließend auf einen anderen Link (der zwar auf die selbe URL führt, aber einen anderen Skill-Parameter übergibt)

    die zwei Satzteile in der Klammer widersprechen sich. Entweder ist es dieselbe URL, oder aber ein anderer Skill-GET-Parameter).

    , so funktioniert es erneut

    natürlich. Es hat sich wieder nicht (nur) der fragment identifier geändert, sondern der Rest der URL.

    • klicke ich aber zweimal hintereinander auf den gleichen Link, so passiert nichts beim Anklicken des Links

    Natürlich nicht. Der Rest der URL hat sich nicht geändert - also kein Grund für den Browser, die Seite erneut anzufordern, er springt nur zum gewünschten Fragment Identifier.
    Wenn Du vor dem zweiten Klick auf denselben Link die Seite verscrollst, wirst Du sehen, daß der fragment identifier erneut angesprungen wird.

    Hat jemand eine Idee woran das liegen könnte?

    Am Prinzip, wie fragment identifier funktionieren.

    Ist es denn nicht möglich, zweimal hintereinander die gleiche Textmarke anzuklicken?

    Doch, natürlich, das funktioniert wunderbar. Nur Du willst ja jedesmal eine

    Ändere jedesmal die URL (indem Du z.B. einen dummy-Parameter anhängst, der einen Timestamp oder einen anderen sich immer ändernden Wert enthält.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. @@MudGuard:

      nuqneH

      Das & in der URL muß als &amp; notiert werden.

      Nö, muss es nicht. Es muss escapet werden, dafür sind noch zwei andere Schreibweisen möglich.

      SCNR. Ich hab heute meinen Klugscheißertag.

      Qapla'

      --
      Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
      1. Hi,

        SCNR. Ich hab heute meinen Klugscheißertag.

        HEUTE???

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      2. Das & in der URL muß als &amp; notiert werden.

        Nö, muss es nicht. Es muss escapet werden, dafür sind noch zwei andere Schreibweisen möglich.

        Ehrlich? Ich dachte immer, in einem URL ist (nur) %26 erlaubt.

        1. Hi,

          Ehrlich? Ich dachte immer, in einem URL ist (nur) %26 erlaubt.

          Hier geht es aber nicht um URL-Escaping, sondern um HTML-Escaping.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hier geht es aber nicht um URL-Escaping, sondern um HTML-Escaping.

            Achso, es ist also Aufgabe des Browsers, aus dem (korrekt escapten) HTML einen (korrekt escapten) URL zu machen? Ich bin bislang davon ausgegangen, dass das, was z.B. in <a href="boxerverbessern.php?BoxerID=123&Skill=aggressiv"> in den Anführungszeichen steht, ein URL ist (steht nämlich auch so in http://de.selfhtml.org/html/referenz/attribute.htm#a@title=SELFHTML: href "gibt das Verweisziel (nach RFC 2396) an" (obsolet durch RFC 3986))und deshalb auch so zu escapen ist.

            1. @@Jatta:

              nuqneH

              was z.B. in <a href="boxerverbessern.php?BoxerID=123&Skill=aggressiv"> in den Anführungszeichen steht, ein URL ist

              Ja.

              und deshalb auch so zu escapen ist.

              Du willst den URI als @href-Wert notieren? Dann muss das '&' im HTML-Kontext escapet werden:
              <a href="boxerverbessern.php?BoxerID=123&amp;Skill=aggressiv">.*
              Das wären dann zwei Parameter im Query: 'BoxerID' mit dem Wert "123" und 'Skill' mit dem Wert "aggressiv".

              Ist hingegen das '&' im URI escapet als
              <a href="boxerverbessern.php?BoxerID=123%23Skill=aggressiv">,
              dann wäre das etwas völlig anderes, nämlich ein Parameter im Query: 'BoxerID' mit dem Wert "123&Skill=aggressiv".

              Qapla'

              * oder mit NCR

              --
              Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
            2. Hi,

              Hier geht es aber nicht um URL-Escaping, sondern um HTML-Escaping.

              Achso, es ist also Aufgabe des Browsers, aus dem (korrekt escapten) HTML einen (korrekt escapten) URL zu machen? Ich bin bislang davon ausgegangen, dass das, was z.B. in <a href="boxerverbessern.php?BoxerID=123&Skill=aggressiv"> in den Anführungszeichen steht, ein URL ist

              Ist es ja auch.

              Aber es geht doch nicht darum, dem Zeichen & in der URL seine Sonderbedeutung "Parametertrenner" wegzunehmen, sondern es geht darum, dem Zeichen & im HTML-Attribut seine Sonderbedeutung "Anfang einer Character-Entity" oder "Anfang einer numerischen Zeichenreferenz" wegzunehmen.

              (steht nämlich auch so in http://de.selfhtml.org/html/referenz/attribute.htm#a@title=SELFHTML: href "gibt das Verweisziel (nach RFC 2396) an" (obsolet durch RFC 3986))und deshalb auch so zu escapen ist.

              Stünde die URL in einem title-Attribut, müßte dennoch das & HTML-escaped werden. Auch wenn die URL dort aus HTML-Sicht nur einfacher Text ist.

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Lieber Thomas,

    der Browser interpretiert einen Link mit Parameter als eine Resource. Ändert sich der Parameter bei ansonsten gleichbleibender URL, interpretiert der Browser das als neue Resource. Ändert sich der Textanker bei ansonsten gleichbleibender Resource, interpretiert der Browser das als identische Resource und sieht keinen Bedarf, die Seite neu zu laden - er springt lediglich auf der aktuellen Seite an eine bestimmte (andere?) Stelle (seiteninterne Navigation).

    Du solltest nach jedem Abarbeiten des Requests Deine Links mit einem neuen Timestamp versehen, damit der Browser die Resourcen als neu anerkennt:

    <a href="boxerverbessern.php?BoxerID=123&amp;Skill=immunitaet&amp;time=1342412399#Verbessern">(Linktext)</a>

    Beachte auch, dass ich meine &-Zeichen korrekt als HTML-Entities maskiert habe! Dein Codebeispiel war in dieser Hinsicht syntaktisch nicht korrekt!

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)