Autor Zpráva
vit.jerabek
Profil *
Ahoj,

resim problem se select elementem, a nikde jsem nebyl schopen najit reseni nebo jestli vubec kdy nekdo takovy problem resil.

Na stranku pomoci tlacitka "Add operation" s onclick akci pridavam select box. Pouzivam k tomu javascript, ajax XMLHttpRequest() a php, ktere generuje select box s jeho options.

Vsechno funguje jak ma, select box se prida a obsahuje options, ktere ma obsahovat. Problem je v tom, ze kdyz neco ze select boxu vyberu a kliknu na tlacitko "Add operation", aby pridal dalsi select box, resetuje se mi vybrana option v prvnim select boxu.

Pripojuji html, js a php kod
html:

<table frame='hsides' id="add_operation">

</table>
<table>
<tr height='50px'><td><input type="button" value='Add operation' onClick="doWork()" /></td><tr>
</table>



Javascipt:

function getHTTPObject()
{
if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest) return new XMLHttpRequest();
else
{

alert("Your browser does not support AJAX.");

return null;

}

}


// Change the value of the outputText field

function setOutput()
{

if(httpObject.readyState == 4)
{
php_script = httpObject.responseText;
document.getElementById("add_operation").innerHTML += php_script;
}

}


// Implement business logic

function doWork()
{
httpObject = getHTTPObject();

if (httpObject != null)
{

httpObject.open("GET", "IU_set_operation.php",true);

httpObject.send(null);

httpObject.onreadystatechange = setOutput;

}
}

var httpObject = null;


PHP:

session_start();

$operation_counter = $_SESSION['operation_counter']++;

require_once("DB_interfaces/get_operations.php"); //list operaci z databaze pro naplneni options

$operation_list = get_operations();

$_SESSION['operation_list'] = $operation_list;

$option_raw .= "<option value='0'>Select operation</option>";

foreach ($operation_list as $temp)
{
$name = $temp[operation_name];
$meth_id = $temp[operation_id];
$option_raw .= "<option value='$meth_id'>$name</option>";
}
echo <<<DIV
<tr><td>Operation No.$operation_counter</td></tr>
<tr id='raw_$operation_counter'><td>
<select name='select_method_$operation_counter'>
$option_raw </select>
</td>
</tr>
DIV;


Myslim, ze problem bude asi spis nekde v javascriptu, proto to davam na tohle forum.

Predem diky za kazdou pomoc

Vit Jerabek
peta
Profil
"resetuje se mi vybrana option v prvnim select boxu"
Jasny a pri generovani selectboxu nastavujes selected polozku?
Protoze podle popisu do tohoto radku hadam, ze se oba selectboxy generuji opet od nuly. Jestli by nebylo rychlejsi poslat obe pole uz pri generovani stranky. poslat 10k textu je rychlejsi nez volat 10x server a chtit 200 znaku. kazde volani je prodleni, kazde volani je 1k hlavicka k dotazu. A vysledny efekt je cekat a cekat...

Kousky kodu jsou nam opravdu k velice uzitecne. Kdyby byl radeji odkaz na
script.php
script.php.txt
urcite by to bylo uzitecnejsi.
Takhle muzeme jen hadat, co tam vse mas a co uz ne a ver tomu, ze kdybych si to doplnil o chybejici komponenty, funguje to jak ma.

document.getElementById("add_operation").innerHTML += php_script;
<table frame='hsides' id="add_operation">
</table>
... takhle tabulku nelze generovat. Je to bug a mam pocit, ze to zlobi jak v IE, tak ve FF. Divim se, ze s tim nemas problem.

"a kliknu na tlacitko "Add operation", aby pridal dalsi select box, resetuje se mi vybrana option v prvnim select boxu."
<input type="button" value='Add operation' onClick="doWork()" />
document.getElementById("add_operation").innerHTML += php_script;
Podle zapisu to zadny dalsi SELECTbox nepridava, pouze prepisuje ten puvodni. A protoze pritom neodesilas selectnutou polozku a pri generovani nemyslis na polozku selected, tak se select vynuluje. Presne podle tveho programu. Nechapu, proc to povazujes za chybu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0