javascriptem přidané inputy nejdou do POST

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

Zdravím všechny,
mám jen dotaz, jestli můj problém je problém nebo normální chování.

V šabloně mám tabulku s id=polozky a k ní potřebuju dynamicky přidat řádky s inputy. Snažím se to pořešit přes JS pomocí appendChild, což vše funguje OK.
Ale pokud se pokusím odeslat formulář, prvky přidané JS se neodešlou.
Pokud si nechám vypsat dump($_POST), objeví se jenom nadefinované prvky v presenteru.

Zkoušel jsem i Replicator, ale ten mi moc nevyhovuje i když chodí. Jde mi spíš o chování JS.

akadlec
Člen | 1326
+
0
-

Ano je to běžné chování. Pokud tyto data chceš tak si je musíš vytáhnout přímo z requestu.

ike
Člen | 14
+
0
-

Díky za odpověď, ale inputy nejsou ani v requestu.

ike
Člen | 14
+
0
-

Ještě rozšíření dotazu.
Dá se tedy nějak ošetřit – odeslat Javascriptem vytvořený/doplněný formulář?

jakub.barta
Člen | 10
+
0
-

Mohla by ti pomoc metoda formu getHttpData(), ktera vrati i hodnoty, ktery formu dynamicky pridas

ike
Člen | 14
+
0
-

Hm, ani tady nejsou. Vůbec se neodešlou.

David Matějka
Moderator | 6445
+
0
-

pokud nejsou v _POST, tak mas pravdepodobne chybu v tvem JS. Prirazujes ten input pod <form> a natavujes mu jmeno?

ike
Člen | 14
+
0
-

Ve formuláři to je. V šabloně je {form xxxx}, v něm je vytvořená tabulka s id=polozky. V JS se vše přiřazuje jako appendChild k této tabulce.

JS zkráceně:

<script>
function addRow(element) {
	var x = document.getElementById("polozky");
	var itemTR = document.createElement('TR');

	x.appendChild(itemTR);
</script>
Myiyk
Člen | 321
+
0
-

formuláře posílají pouze elementy input a textarea
jestli si chceš tu tabulku poslat do POST, musíš si k tomu vyrobit JS

V JS zachytíš událost odeslání formu a přihodíš k tomu data z tabulky.

ike
Člen | 14
+
0
-

Já tam inputy mám, jenom jsem je do ukázky kódu nezahrnul. Ale bohužel v POSTu nejsou.
Pro úplnost v JS přidávám TR->TD->INPUT.

Kubínos
Člen | 3
+
0
-

Pošli jsem tvůj JS jak je tam přidaváš. A poté jak se hodnoty snažíš získat.

ike
Člen | 14
+
0
-

vše v JS funguje, hodnoty se doplňují, inputy se přidávají, jediný problém je v tom, že nejsou v POSTu.

LATTE
<table name=„polozky“ id=„polozky“ border=„0“ cellspacing=„0“ width=„100%“ cellspacing=„10“ cellpadding=„5“>
</table>

volání JS v presenteru:

<?php
		$form->addSelect("sklad_karty", "", $karty,10)
			->setAttribute("class","big bigList")
			->setAttribute("ondblclick", "addRow(this,0)");
?>

funkce.js (načtená správně, všechny funkce pracují jak mají)

<script>
function addRow(element, todo) {
	var x = document.getElementById("polozky");

	var itemTR = document.createElement('TR');

	var itemTD1 = document.createElement('TD');
		itemTD1.id="TD1";
		itemTD1.style.verticalAlign="middle";

	var itemInputNazev = document.createElement("input");
		itemInputNazev.type = "text";
		itemInputNazev.id = "addNazev";
		itemInputNazev.className = "big";
		itemInputNazev.value="pokusná hodnota";

	itemTD1.appendChild(itemInputNazev);

	itemTR.appendChild(itemTD1);

	x.appendChild(itemTR);
}

</script>
David Matějka
Moderator | 6445
+
+3
-

ten input musi mit name

ike
Člen | 14
+
0
-

Díky!!!
Jsem to ale jelito.
Opravdu to bylo chybějícím NAME.
V předchozí aplikaci psané bez Nette v čistém php to fungovalo, tak jsem to jenom převzal.

Editoval ike (23. 6. 2015 9:33)

akadlec
Člen | 1326
+
+1
-

opravdu? a jak si se k těm polím dostal? imho to fungovat nemohlo, v postu se ti ty pole nemohly objevit pokud neobsahovaly jméno, leda bys ten post posílal jinak

ike
Člen | 14
+
0
-

Načítal jsem je přes id.

akadlec
Člen | 1326
+
0
-

jenže IDčka ti v postu nejdou, tam to jde přes name, takže jak jsem psal, ten request si musel skládat jinak

ike
Člen | 14
+
0
-

Tak máš pravdu, prošel jsem ten starý kód, tam skutečně NAME je. Jen při přepisování jsem je umazal a netušil jsem, že pro POST jsou ty NAME důležité.
Díky všem za snahu pomoct.