JS pridavani poli do formulare
- insider
- Člen | 31
Zdravim,
zacinam s nette a chtel bych se zeptat, jestli je nejaka moznost pridat
dynamicky prvek do formulare.
Priklad:
<input type="text" name="field[]" />
<input type="text" name="field[]" />
<a href="#" onclick="return addField();">Pridat input</a>
po kliku na odkaz by se pridal dalsi stejny input do pole
- Jod
- Člen | 701
niečo takéto? Example
Niečo také ako ty píšeš sa dá ale s postbackom viď tu .
Mňa by zase zaujímalo či sa dá do formulára pridať nejaký html
element, ako napr. img.
Uvediem príklad:
Mám formulár ku ktorému môžem pridať tak 5 obrázkov. Pridám tri.
Pri editácii chcem aby sa mi zobrazili dva volné uploady a tri zmenšeniny
obrázkov (vjem dá sa to aj cez obrázkové tlačítko, alebo si vykresliť
formulár ručne)
Editoval Jod (2. 11. 2008 1:09)
- insider
- Člen | 31
To, co je v tom prikladu je neco jineho. Takze priklad z „praxe“
Je nejaka akce, a jeden clovek zadava lidi k jedne akci(povinni jsou 3), takze
ze startu to vypise 3 inputy a odkaz na pridani dalsich(proto v name inputu je
pole – []).
Nebo ted me jeste napadlo – kdyz odesilate z gmailu zpravu s prilohou a
chcete odeslat vic, nez jeden soubor, je tam odkaz „pridat dalsi soubor“,
coz jen prida input t="file" n="img[]"
…
Ten postback si jeste proctu
- LuKo
- Člen | 116
Jod napsal(a):
No ano s tým postbackom to nejak tak ide.
Alebo, keď to chceš cez javascript tak si tam pridáš ručne napr. <input name=„img[]“ /> a v kóde k tomu budeš pristupovať cez HttpRequest::getPost(‚img‘). Myslím, že by to malo, či mohlo fungovať :D
Ano, toto funguje. Existuje nějaká možnost, jak javascriptem přidat nový formulářový prvek a pak si ho v obsluze formuláře vybrat přes $form->getValues()?
- blacksun
- Člen | 177
Tohle jsme s kolegou řešili nedávno v práci. Nakonec jsme použili řešení, kdy na začátku skriptu přes HttpRequest::getPost() zjistíme, kolik máme ve formuláři oněch přidaných polí (hodnotu si uchováváme v hidden poli a měníme ji spolu s přidáváním/ubíráním inputů pomocí jquery). Podle toho pak upravujeme samotnou definici formuláře, který pak je schopen všechny inputy správně zpracovat, včetně například různých id pro přidáváné inputy. Je to trošku krkolomný, ale nakonec z toho máme relativně obecné a fungující řešení.
- LuKo
- Člen | 116
Takže něco takového?
<?php
public function presentEdit($id = 0)
{
if (!$form->isSubmitted()) {
$table = new Table();
if ($id > 0) {
$values = (array) $table->fetch($id);
} else {
$values = (array) $table->createBlank();
}
} else {
$values = HttpRequest::getPost();
}
$form = new AppForm();
/*
* ... konstrukce formulare na zaklade obsahu $values ...
*/
$form->setDefaults($values);
}
?>
Při té příležitosti mě napadá ještě jedna věc. Pokud takto sestavím formulář po odeslání a na políčka nastavím filtr (například musí být číslo), aplikují se tato pravidla a formulář se zvaliduje celý, nebo se nejprve validuje a až pak dojde na sestavení formuláře (což by asi nebylo logické)?
- David Grudl
- Nette Core | 8218
setDefaults se používá pro logické hodnoty, pro načtení HTTP
hodnot je potřeba volat $form->processHttpRequest()
. Bez
parametru.
Formulář se validuje až při zavolání metod validate()
nebo
isValid()
.