我正在嘗試有一個文件上傳頁面,允許任意數量的文件上傳。我發現JavaScript代碼成功地在窗體中創建了一個新的文件輸入字段,但是,除了HTML中硬編碼的字段之外的任何字段都不會被髮送到我的perl CGI腳本。動態表單字段沒有發送到CGI腳本
的Javascript
function fileFields() {
var x = document.getElementById('fileUpload');
x.onclick = function() {
var i = parseFloat(this.lastChild.id)+1;
input = document.createElement("input");
input.setAttribute("type", "file");
input.setAttribute("name", 'fileName_' + i);
input.setAttribute("id", i);
this.appendChild(input);
}
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent(function() {
fileFields();
});
HTML表單
<form action="https://www.indiana.edu/~webdeviu/phil/submit.cgi" method="post" enctype="multipart/form-data">
<select name="property">
<TMPL_LOOP NAME="PROPS">
<option value="<TMPL_VAR NAME="user">"><TMPL_VAR NAME="user"></option>
</TMPL_LOOP>
</select>
<br />
<a href="#" id="fileUpload"><input type="file" name="file_1" id="1" /></a>
<br />
<input type="submit" name="submit" value="Upload" />
</form>
的Perl CGI,部分看起來多個文件
my @files;
my $i = 1;
my $file = $query->param("file_" . $i);
while ($file) {
push(@files, $file);
$i = $i + 1;
$file = $query->param("file_" . $i);
}
print $query->header();
print scalar(@files); # prints 1 regardless of how many files I upload
exit;
我也把漏出來while循環在一個點打印出$文件,一旦它變成「file_2」,並且在那個點上它是空的。
我錯過了什麼?任何幫助深表感謝。
你不必叫file_2輸入元素,它被稱爲fileName_2 – James