Autor Zpráva
Radimek
Profil *
Dobrý den,
potřeboval bych poradit, jak udělat toto: Uživatel si v selectu s názvem "pocet" vybere např. číslo 50 a JS vygeneruje 50 inputů. Jak na to?
Děkuji
Jozin
Profil
Zdravím,

pokud to hodláš dělat pomocí js, tak bych možná spíš použil odkaz (přidat další). To s tím počtem by bylo logické, kdyby se to odesílalo php-čku a ten to generoval.

Jinak chceš jen radu, takže s tím co jsem teď napsal, tak svážeš odkaz s metodou onClick a v ní zavoláš nějakou funkci (sám si ji pojmenuješ). Tu funkci poté budeš mít někde nadefinovánu buď v externím js nebo v <script></script>. Tam pomocí DOM vložíš HTML tag input a nejspíš si přičteš 1 k nějaké proměnné i, která bude udávat kolikátý je to prvek.

Stačí ti to takto? Jozin.
Radimek
Profil *
Ano, vím nyní to tak mám pomocí odkazu, ale podle me by bylo lepší, aby si uživatel počet inputů vybral v selectu. Nemusí pak totiž 50x klikat
_es
Profil
Radimek:
Použiješ v nejakom cykle napríklad metódu appendChild.
Jozin
Profil
Radimek:
A nebude tedy rychlejší udělat to v PHP? Teen odeslaný formulář už nezabere o tolik víc času.
Radimek
Profil *
Jozin:
Ano, ale například když uživatel zjistí po 20ti minutách vyplňování inputů že mu např. 1 chybí, tak musí vše psát znova
Jozin
Profil
Radimek:
Tak tam jednoduše necháš ten odkaz. Prostě si vybereš dejme tomu 50 položek pak zjistíš, že ti 3 chybí, tak si 3x klepneš na odkaz. Co ty na to?
Radimek
Profil *
Vidíš, to mě nenapadlo, ale už jsem zkusil toto:
<script type="text/javascript">
function add(pocet) {           
while (i<=pocet)
  { 
var element = document.createElement("input");       
element.setAttribute("type", "text");     
element.setAttribute("value", pocet);     
element.setAttribute("name", "kolik");       
var foo = document.getElementById("fooBar");           
foo.appendChild(element);   
i++;
}
} 
</script> 
<form name="form" action="#">
<select name="element">        
<option value="5">5</OPTION>     
</select>   
Ale nejde to a nevím proč :(
<INPUT type="button" value="Add" onclick="add(document.forms[0].element.value)"/>   
<span id="fooBar">&nbsp;</span> 
</form>
Jozin
Profil
Radimek
Nejde ti to, protože jako document.forms[0].element.value se buď nic nepošle a nebo to bude Add, protože máš form a né forms
Radimek
Profil *
<form name="form" action="#">
<select name="element">        
<option value="5">5</option>     
</select>   
<INPUT type="button" value="Přidat" onclick="add(window.opener.document.forms['form'].elements['element'].value)"/>   
<span id="fooBar">&nbsp;</span> 
</form>

Takle by to už mělo jít, ale furt nic :(
_es
Profil
Radimek:
Pridaj na začiatok funkcie:
pocet = Number(pocet);
A nikde nemáš definovanú premennú i ani nastavenú jej hodnotu.
Radimek
Profil *
Už mi to jde, ale šlo by udělat, aby se nepřidával jenom input ale k němu i nějaký text? Např. Jméno: <input>
function add(pocet) {  
var i=0;         
while (i<pocet)
  { 
var element = document.createElement("input");       
element.setAttribute("type", "text");     
element.setAttribute("value", "");     
element.setAttribute("name", "kolik"+pocet);       
var foo = document.getElementById("fooBar");           
foo.appendChild(element);   
i++;
}
} 
Tori
Profil
Radimek:
šlo by udělat, aby se nepřidával jenom input ale k němu i nějaký text?
Nevím, je-li to nejlepší možnost, ale pomocí document.createTextNode() to jde určitě. Taky je metoda element.cloneNode() - stačí jen najít a klonovat první z těch inputů a vymazat v něm zadanou hodnotu.

Jinak stačilo by nastavit pole jako jméno inputu (<input name="vstup[]">) - v PHP všechny tyhle inputy najdete jako číslované pole $_REQUEST['vstup']. V případě, že byste chtěl umět některé inputy zase odstranit si ušetříte práci s přečíslováváním.
_es
Profil
Radimek:
Prečo ignoruješ rady ([#11]])?
Namiesto metódy setAttribute je lepšie nastavovať vlastnosti JS objektu.

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