Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 22. Oktober 2012 09:48

peter-pan
hat von CMS/ms gehört
Registriert: 22. Oktober 2012
Beiträge: 2

Ankerproblem

Hi,

Ich habe ein gewaltiges Problem und ich verstehe nicht, warum ich das Problem habe.

Ich habe mehrere <select> Felder. Die werden immer direkt nach dem ändern per onchange="submit(this);" aktualisiert.

Nur zur Info warum; Das deswegen damit bei nicht selektierbarem Wert das type=select in type=text geändert wird.
Das alles funktioniert auch recht gut.

Aber das Form ist etwas länger. Also springt der Browser immer nach onchange="submit(this);" nach oben. Jetzt dachte ich mir, okay, dann setze ich Anker.

In .php sieht das dann etwa so aus.

if ($lang!=$lang_1) //vergleichen, ob lang geändert wurde
    {
        $smarty->assign('anker', "#lang"); //Anker an form- Tag hängen
       
        $lang_1=$lang; //dem Script sagen, dass $lang_1 jetzt wieder == $lang ist, somit sollte im nächsten Durchgang die if- Anweisung nur durchgeführt werden, wenn lang nochmal geändert wird.
    }
$smarty->assign('hidden_lang', "<input type=\"hidden\" name=\"lang_1\" value=\"$lang_1\">"); //hier wird ein type=hidden erzeugt um zu vergleichen, ob sich lang und lang_1 untescheiden.



In html sieht das so aus.


<form name="test" id="1" action="http://{$smarty.server.PHP_SELF}{$anker}" method="post" enctype="multipart/form-data">


<!--Viele Zeilen Fromular ähnlich aufgebaut wie folgendes-->

<a name="lang"></a><!--hier der Ankerpunkt-->
{if $lang=="other" || $lang_other!=''} <!-- hier wird überprüft, ob type = text oder type = select-->
<label for="name">{#text_lang#}</label><input type="text" name="lang_other" style="width:140pt;" value="{if $lang_other!=''}{$lang_other}{else}{#option_insert#}{/if}" {literal}onclick="if (this.value=='{/literal}{#option_insert#}{literal}') {this.value='';}"{/literal}><p>&nbsp;</p>
{else}
<label for="name">{#text_lang#}</label><select name="lang" style="width:140pt;" onchange="submit(this);">
  <option value="so_what" {if $lang==""}selected{/if}>{#option_so_what#}</option>
  <option value="null">--------------------</option>
  <option value="german" {if $lang=="german"}selected{/if}>{#option_lang_german#}</option>
  <option value="english" {if $lang=="english"}selected{/if}>{#option_lang_english#}</option>
  <option value="french" {if $lang=="french"}selected{/if}>{#option_lang_french#}</option>
  <option value="spanish" {if $lang=="spanish"}selected{/if}>{#option_lang_spanish#}</option>
  <option value="null">--------------------</option>
  <option value="other" >{#option_other#}</option>
</select><p>&nbsp;</p>
{/if}

Nun die Frage, warum funktionert das nicht? Oder genauer, warum funktioniert das nicht beim ersten Durchlauf? Im zweiten Durchlauf funktioniert das wunderbar. Aber da ist der User ja schon mit einem anderen Feld beschäftigt.

Komisch ist auch, dass schon beim ersten Durchlauf im Quelltext alles stimmt. Aber weder der IE noch Firefox springen zum Anker.

Auszug aus dem Quelltext

<form name="test" id="1" action="http://localhost/eigene_seiten/test.php#lang" method="post" enctype="multipart/form-data">
<input type="hidden" name="lang_1" value="german">



<a name="lang"></a>


<label for="name">Sprache:</label><select name="lang" style="width:140pt;" onchange="submit(this);">
  <option value="so_what" >egal</option>
  <option value="null">--------------------</option>
  <option value="german" selected>deutsch</option>
  <option value="english" >englisch</option>
  <option value="french" >franz&ouml;sisch</option>
  <option value="spanish" >spanisch</option>
  <option value="null">--------------------</option>
  <option value="other" >hier nicht gelistet</option>
</select><p>&nbsp;</p>


Kann es sein, dass smarty den Quelltext für den Browser doch nicht der Reihe nach aufbaut?

Ich bin für jeden Tipp dankbar. Und ich kann mich auch mit einer anderen Lösung abfinden. Nur sie sollte schon im ersten Durchlauf funktionieren.

Offline

#2 22. Oktober 2012 11:20

mike-r
arbeitet mit CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 898
Webseite

Re: Ankerproblem

Kann das Problem in einem Testcase nicht nachvollziehen, obwohl da mehrere Fehler sind in Deinem Code.

#IDs müssen mit Buchstabe beginnen
statt name würde ich id verwenden oder mindestens beides

Kann es sein, dass Dir da ein base href reinpfuscht?
Wie lautet denn die URL nach dem submit? Ist das #lang enthalten?
€: ist überhaupt genug Platz da um zum Anker zu springen?

Beitrag geändert von mike-r (22. Oktober 2012 11:21)


Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz

Offline

#3 22. Oktober 2012 12:08

peter-pan
hat von CMS/ms gehört
Registriert: 22. Oktober 2012
Beiträge: 2

Re: Ankerproblem

Oh man, manchmal sieht man den Wald vor lauter Bäumen nicht.

Danke Mike für die Denkanstöße. Vielleicht sollte ich wirklich mal öfter darauf achten, was submit veranstaltet. Also mein Fehler war, dass #lang noch garnicht aktiv war.

Und naja, die anderen Tipps, auch dafür danke, die werde ich auch beherzigen. Spätestens wenn das wirklich online geht, ist das korregiert. wink

Offline