Autor Zpráva
6xx
Profil *
Ahoj,
potřeboval bych pomocí javascriptu přidat do formuláře další tag select, se stejnými hodnotami option (jak value, tak i text) jako má ten, který je přímo součástí html. Nikdy jsem v javascriptu nic nevytvořil, a tohle je můj první (bohužel nefunkční) výtvor:

xhtml vypadá asi takto:

<form …

<select name="id_menu0">
<option value="1">něco 1</option>
<option value="2">něco 2</option>
<option value="3">něco 3</option>
</select>

</form>


pomocí javascriptu bych chtěl přidat další element select, který by měl name=id_menu1 atd. Problém je, že nedovedu ani vytvořit kopii select.


function addSelect(){
var obj_select = document.getElementByName('id_menu0');
var new_obj_select = document.createElement('select');
// var new_option = document.createElement('option');

for (i=0;i<obj_select.length;i++){
/* // Nefunguje toto:
new_option.text = obj_select.options[i].text;
new_option.value = obj_select.options[i].value;
new_obj_select.add(new_option,null);
*/ // Ani toto:
new_obj_select.add(obj_select.options[i],null);
}
}


Díky za jakékoliv rady.
Casero
Profil
6xx
A co mít v XHTML již hotový i druhý select a pouze mu nastavovat viditelnost?
6xx
Profil *
To by sice šlo, ale já bych potřeboval, aby těch selectů šlo udělat „neomezené“ množství (přesněji tolik, kolik je v tom prvním voleb, aby v každém šly navolit další). Tedy když budu potřebovat další, kliknu na tlačítko/odkaz a script mi přidá další select. Teď jsem ale dostal nápad, kterým by to šlo obejít – první select by byl viditelný s možností vybrat pouze jednu volbu (ta bude brána jako „hlavní“) a druhý bude invisible který bude mít vlastnost multiple.
Přesto by mě zajímalo, proč se nevytvoří ani prázdný tag select.
6xx
Profil *
Mimochodem, chybějícího s v getElementsByName jsem si vědom.
centi
Profil

<script type="text/javascript">
var selectsCount = 1;
function addSelect() {
var obj_select = document.getElementById("id_menu0"); // originalny select, ktory bude klonovany
var new_obj_select = obj_select.cloneNode(true); // vytvor jeho klon, hodnota 'true' v cloneNode() znamena, ze sa budu klonovat i jeho detske elementy, teda vsetky OPTION
new_obj_select.id = "id_menu" + selectsCount; // pridaj novemu selectu spravne ID
selectsCount++; // zvys pocet selectov o 1
obj_select.parentNode.appendChild( new_obj_select ); // pripoj novy select na koniec jeho parent elementu (v tvojom pripade FORM)
}
</script>
6xx
Profil *
Díky moc, funguje to skvěle. cloneNode je geniálně jednoduchá věc. Přesto mám pár otázeček:
1. jestli to chápu dobře, tak se appendChild() musí použít vždy když něco chci vložit. Jak tedy pak něco vložím třeba na začátek/doprostřed/jinam rodičovského elementu?
2. přijde mi blbé, když kopie mají stejné id. Napadlo mě vypustit id a použít getElementsByName, ale podle reference nevrací referenci na první objekt daného id, ale pole nebo něco takového. Dá se to nějak vyřešit i jinak, než měněním id u každého prvku a přesto elegantně?
6xx
Profil *
Jak přidat něco na začátek už vím, je ale možné přesněji zadat pozici, kde se daný prvek „objeví“?
Je nějaký rozdíl mezi:
new_obj_select.id = "id_menu" + selectsCount;
a
new_obj_select.setAttribute('id','id_menu'+selectsCount);

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: