Právě je 25 dub 2024 00:16

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 
Autor Zpráva
 Předmět příspěvku: Interaktivní formulář na vkládání soborů
PříspěvekNapsal: 20 říj 2009 04:19 

Registrován:
20 říj 2009 04:01
Příspěvky:
2
Dobrý den,
snažím se udělat formulář pro upload souborů na server. Přál bych si to udělat tak, aby se po každém kliknutí na odkaz "přidat další soubor" objevil nový prvek pro přidání.
Problém je, že po objevení nového prvku zmizí všechny dříve vybrané soubory. Při odstraňování vše funguje jak má. Testoval jsem to na IE8 a Firefox 3.

S jinými prvky jsem to řešil tak, že jsem vytvořil speciální pole, ve kterém jsem uchovával vždycky jejich aktuální hodnoty, a při každém přidávání jsem pomocí tohoto pole a atributu value obnovil hodnoty. Ale bohužel u typu "file" to nelze použít.

Zde je zdrojový kód:
<html>
<body>
<script language="JavaScript" type="text/javascript">
<!--
var elm = 1;

function remove(index) {
var x = document.getElementById("container");
var z = document.getElementById("item/" + index);
x.removeChild(z);
}

function add() {
// přidání a nasavení elementu
var x = document.getElementById("container");
x.innerHTML += "<div id=\"item/" + elm + "\">\n" +
"<input type=\"file\" id=\"" + elm + "\" name=\"file/" + elm + "\" />" +
"<a href=\"#\" onclick=\"remove(" + elm + "); return false;\" >Odstranit</a>" +
"</div>";
++elm;
}
// -->
</script>

<form name="" method="post" enctype="multipart/form-data" action="">
<div id="container">
<script language="JavaScript" type="text/javascript">
<!--
add();
// -->
</script>
</div>
<div>
<a href="#" onclick="add(); return false; ">Pridat dalsi soubor</a>
</div>
</form>
</body>
</html>

Za každou radu děkuju
Radek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Interaktivní formulář na vkládání soborů
PříspěvekNapsal: 20 říj 2009 13:23 
C4 podpora
C4 podpora

Registrován:
29 čer 2009 20:53
Příspěvky:
263
Dobrý den,

problém s tagem input typu file je způsoben bezpečnostním opatřením, které je zavedeno v prohlížečích. Jde o to, že když by bylo možné v javascriptu nastavit hodnotu file inputu, tak by mohla webová stránka bez vědomí uživatele uploadovat soubory z lokálního disku na server. Např. by se formulář nahrál do divu, který by se nezobrazoval, nastavil by file inputu hodnotu, která by odpovídala cestě k "požadovanému" souboru a následně by se přes javascript formulář automaticky odeslal. Takže uživatel by se o tom ani nemusel dovědět. Vaše situace je analogická, sice nemodifikujete hodnotu file inputů, ale pracujete tam s vlastností innerHTML, která input tagy obsahuje. Z toho důvodu prohlížeč zresetuje hodnoty file inputů na prázdné řetězce.

Řešení spočívá v tom, že místo modifikace vlastnosti innerHTML použijete document.createElement() a appendChild(). Zkuste funkci add() předělat do této podoby:

Kód:
function add() {
// přidání a nasavení elementu
var x = document.getElementById("container");
var y = document.createElement('div');
y.id = "item/" + elm;
y.innerHTML = "<input type=\"file\" id=\"" + elm + "\" name=\"file/" + elm + "\" />" +
"<a href=\"#\" onclick=\"remove(" + elm + "); return false;\" >Odstranit</a>";
x.appendChild(y);
++elm;
}

_________________
Jan Vítek
Webhosting C4
http://www.c4.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Interaktivní formulář na vkládání soborů
PříspěvekNapsal: 20 říj 2009 17:26 

Registrován:
20 říj 2009 04:01
Příspěvky:
2
Přesně tohle jsem potřeboval.

Děkuju


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
FTP Uploader
Staňte se naším zákazníkem!
Hledáme kolegy
Tvorba web stránek Hosting
Návody pro C4

© 2009-2024 ČESKÝ WEBHOSTING s.r.o. Kontaktní e-mail: forum@c4.cz
Diskuzní fórum využívá technologie: phpBB, phpBB-SEO.com, phpBB.cz