defaultselected JavaScript vs. HTML

Zdravím,

Pomocou PHP dynamicky generujem formulár so selectmi. V závislosti od posledne vybratej možnosti sa stáva defaultným OPTION posledne vo formulári odoslaný na server:

if ($_POST["from"]==$i) {

echo "<option value='".$i."' selected='selected'>".$num["z"]."</option>\n";

} else {

else echo "<option value='".$i."'>".$num["z"]."</option>\n";

}

Súčasťou formuláru je aj RESET tlačítko, ktorým sa vyvolá udalosť OnReset a spustí sa JavaScriptová funkcia, ktorej obsahom je:

document.select.from[0].defaultSelected=true;

Takže mám formulár, ktorý si zapamätá posledne na server odoslané hodnoty, ale už nedokážem jeho obsah zresetovať, stále tam bude PHP kódom defaultne vygenerovaný OPTION. Ako by ste to riešili? Mne napadá už len AJAX.
Nerozumim.
PHP kod, co jsi uvedl, nevytvari select s optiony, ale pouze optiony.
JS kod, co jsi uvedl, nenastavuje default hodnotu. Mozna v nejakem html5, ale ja tento zapis nepouzivam.

Problem mas teda jaky?
Ted ti to asi dela to, ze pokud uzivatel stranku odesle, ty mu prednastavis select tak, jak ti ho poslal.
A docilit chces ceho? Prednastavit mu select stejne jako si to vybral vcera, kdyz dneska prvne otevre stranku? Muzes pouzit JS cookies pro ulozeni hodnoty po urcity cas.
A nebo muzes pouzit PHP session pro ulozeni hodnoty, dokud nezavre vsechna okna prohlizece (vetsinou je pak nastavene, ze se ma sessionid ztratit, ikdyz server ho drzi obvykle jeste 17 min od posledniho obnoveni).
A nebo muzes pouzit databazi, ci jiny zpusob serveroveho ukladani, kde ale musis nejak odlisit jednotlive uzivatele, treba prihlasenim, podle ip nebo nejak. teda, pokud nechces, aby si navzajem prepinali hodnoty selectu.
Tak ešte raz. Samozrejme, neuviedol som celý PHP kód, len fragment, ktorý generuje OPTIONy. Mal som vo formulári SELECT s určitými položkami OPTION. Tento SELECT a OPTIONy boli vygenerované php skriptom, a v závislosti od poslednej odoslanej hodnoty na server bol vygenerovaný atribút selected s hodnotou selected práve u toho OPTIONu, ktorý zodpovedal práve posledne odoslanej hodnote na server. Účelom bolo práve komfortné vyplňovanie formulára, ak sa užívateľ pomýli, aby nemusel znovu zadávať správne hodnoty, ale len opraviť tie nesprávne. Súčasne som však chcel použiť aj celkové resetovanie formulára tlačítkom RESET. Všetko sa chovalo tak ako som chcel, pokiaľ nebolo potrebné použiť resetovacie tlačítko aj s uvedeným JavaScript kódom, prišiel som na to, že ten kód nedokáže prebiť nastavenie SELECTu s položkou OPTION, u ktorej je použitý atribút selected='selected'. Takže pri tomto mojom riešení buď musím oželieť predvyplnenie formulára, alebo sa zriecť resetovacieho tlačítka. Aby to nebolo len o mlátení prázdnej slamy, napísal som celý php skript, kde absolútne defaultná hodnota (to znamená tú, ktorá je defaultná pri otvorení stránky s formulárom, ale ešte pred prvým odoslaním dát na server) je A1, čomu odpovedá index 0 v Javascriptovom kóde.

<?php session_start(); ?>

<head>
<script language="JavaScript">

function res() {

document.xxx.yyy[0].defaultSelected=true;

}

</script>

</head>

<body>

<form action="" method="get" onreset="res();" name="xxx">

<select name="yyy">

<?php

echo "\n\n";

for ($i=1;$i<=5;$i++) {

if (isset($_GET["yyy"]) && $_GET["yyy"]==$i)
echo "<option value='".$i."' selected='selected'>A".$i."</option>\n";

elseif ($i==1)
echo "<option value='".$i."' selected='selected'>A".$i."</option>\n";

else
echo "<option value='".$i."'>A".$i."</option>\n";

}

echo "\n\n";

?>

</select>

<input type="reset" value="*"><input type="submit" value="send">

</form>
</body>


Už som skúsil úspešne použiť na dynamické generovanie formuláru pomocou AJAX, takže najskôr siahnem po tejto alternatíve. Riešením taktiež by bolo zmeniť poradie OPTIONov v SELECTe, aby požadovaný defaultný bol na prvom mieste s tým, žeby sa nepoužilo nastavenie selected='selected' v HTML kóde OPTIONov daného SELECTu.
Tva logika je totiz chybna.
Server vygeneruje pres php html kod, posle prohlizeci a ten jej zobrazi a pouzije v nem js.
Tudiz, pokud posles html kod, kde mas nastavene jine selected nez na predchozi strance, pak logicky reset resetuje do teto nove verze, protoze je to uz jina stranka. Cili bys na reset musel nacist stranku bez odesilani get/post. Jinymi slovy, tvuj reset by se vlastne choval jako klasicky odkaz.

Take muzes pouzit javascript pro kontrolu a prednastaveni selectu. Nemusis to odesilat na server.

Ale take muzes pouzit javascript / session k ulozeni puvodniho nastaveni selectu.
<script>
var form_default = {
'yyy': 0,
}
function formReset(form)
{
for (i in form_default)
{
if (form[i]) //jestli existuje ve formu prvek s takovym name
{
switch (form[i].nodeName) // jaky je to typ tagu
{
case "select" : form[i].selectedIndex = form_default[i]; break;
case "input" : switch (form[i].type) {"text": form[i].value = form_default[i]; break; default: break;}; break; // jestli je to input typu text, radio, checkbox...
default: break;
}
}
}
}
</script>
<input type=button onclick=formReset(this.form)>