Možnost vymazání adresy z vyplněného upload políčka

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

Ahoj,
v nette mám formulář, kam mohu nepovinně přiložit až 5 obrázků.

$form->addUpload('photo1', 'Fotka1: ');

Problém nastane, pokud uživatel omylem vybere obrázek, který už nechtěl a chtěl by ho vymazat z formuláře, aby se nenahrál. (Vybral 4 obrázky, ale chce nahrát pouze 3). Nette a jeho JS mu nedovolí z INPUT políčka smazat adresu a jediná možnost je celý formulář zrušit a vyplnit ho znovu. Přemýšlel jsem nad přidáním tlačítka „VYMAZAT“ za každé uploadovací pole, ale mnohem raději bych to vyřešil v rámci frameworku, nějakým konfiguračním nastavením. Je to možné? Případně nestálo by za úvahu, jestli něco podobného neimplementovat?

Díky :)

na1k
Člen | 288
+
0
-

Pokud je tvůj problém to, co si myslím že je, tak jde o záležitost samotného prohlížeče. Zkus si vytvořit obyčejnou html stránku (žádné Nette, nic) se souborovým inputem – vybraný soubor nepůjde odvybrat ani tam.

Asi by se to dalo řešit javascriptem přes něco jako element.value = '', ale nezkoušel jsem to. V takovém případě by asi nebylo od věci podědit si control pro file upload a přepsat mu renderovací metodu tak, aby vykreslil rovnou jako „uploadovací políčko s vyprazdňovacím tlačítkem“.

Rypi
Člen | 38
+
0
-

Ou, opravdu máš pravdu… Firefox opravdu nedovolí to políčko vymazat. Tak tedy nezbyde než vlastní JS tlačítko na vymazání :)

Díky

Filip Procházka
Moderator | 4668
+
0
-
<input type="reset" />

nefunguje?

na1k
Člen | 288
+
0
-

HosipLan, určitě funguje, ale maže celý formulář :-)

Rypi
Člen | 38
+
0
-

Přesně tak.
Protože formulář stejně vykresluji manuálně, vyřešil jsem to takto:

<a href="#" onclick="$('#frmmistaAddForm-photo1').val(''); return false;">Vymazat</a>
na1k
Člen | 288
+
0
-

Snad bych jen doporučil použít namísto pevně daného #frmmistaAddForm-photo1 použít ID získané z konkrétního controlu, něco jako $control->htmlId (nebo to bylo $control->htmlName? z hlavy si nejsem jistý).

Tím si zajistíš funkčnost i v případě, že později přejmenuješ formulář anebo control, a zapomeneš, že máš v šabloně nějakou vlastní úpravu :-)

Patrik Votoček
Člen | 2221
+
0
-

a to $('#frmmistaAddForm-photo1').val(''); ti funguje? Protože pokud vím tak prohlížeče z bezpečnostních důvodů nedovolují měnit VALUE u file inputu (aby sis nemohl poslat data jaká chceš). Smazání by se mělo dát obechcat cca takto:

$file = $('#frmmistaAddForm-photo1');
$file.replaceWith($file.clone());

Netestováno…

Rypi
Člen | 38
+
0
-

na1k: díky, to jsem hledal, ale nemohl jsem to najít. (ani dokumentace, ani API).
Ovšem protože mám v kódu stejně

{$control['mistaAddForm']['photo1']->control}

tak to pomůže snad jen kdyby nette změnilo generovaný string. I tak to ale vyzkouším :)

Patrik: Ano, ve FF to funguje. u ostatních zkusím, kdyžtak použiji tvůj kód :)

//EDIT: Funguje mi to jen v FF a chrome, Opera a IE to bojkotují :D Zkusím pak tu tvou možnost

Editoval Rypi (27. 7. 2011 18:03)