JS pridavani poli do formulare

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
insider
Člen | 31
+
0
-

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
+
0
-

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
+
0
-

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

Jod
Člen | 701
+
0
-

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

LuKo
Člen | 116
+
0
-

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()?

Jod
Člen | 701
+
0
-

Nie, metóda getValues vracia hodnoty komonent ktoré si vytvoril pri definícii formulára, pričom obyčajným javascriptom toto asi nedosiahneš.

blacksun
Člen | 177
+
0
-

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
+
0
-

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 | 8171
+
0
-

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().