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;
}