2013-04-03 47 views
10

文件我有在非IE瀏覽器如何從<INPUT TYPE = '文件' ... />(間接)的JavaScript

「輸入標籤」 的問題
<input type="file" ... 

我想寫我的上傳者,只是使用JavaScript和asp.net。

我沒有問題上傳文件。

我的問題發生。當我希望得到我的在非IE瀏覽器中的文件與

<input type="file" ... 

我不想直接從input使用,因爲它的外觀不會改變正確

我寫了這個代碼從硬盤獲取文件:

function $tag(_str_tag) { 
return document.getElementsByTagName(_str_tag); 
} 

function $create(_str_tag) { 
    return document.createElement(_str_tag); 
} 


function $open_file() { 
    _el_upload = $create("input"); 
    _el_body = $tag("body")[0]; 
    _el_upload.setAttribute("type", "file"); 
    _el_upload.style.visibility = "hidden"; 
    _el_upload.setAttribute("multiple", "multiple"); 
    _el_upload.setAttribute("position", "absolute"); 
    _el_body.appendChild(_el_upload); 
    _el_upload.click(); 
    _el_body.removeChild(_el_upload); 
    return _el_upload.files; 
} 

在IE中它工作得很好,並返回我目前的文件; 在Chrome和Firefox中,加載「文件輸入對話框」後,它不能返回任何文件。 和Opera和Safari完全不在一起。

我可以用這個技巧修復它,但它基本上不好。

_el_upload.click(); 
alert(); 

我認爲「回調」或「等待功能」可能會解決這個問題,但我無法處理它。

+1

你的意思是「它的外觀沒有改變」你想做什麼? –

+0

您需要使用''元素的'onchange'事件。在你選擇一個文件之前發生'return _el_upload.files'。 –

+0

hi @RocketHazmat thx回覆:我打算在我的CMS中創建我自己的用戶界面,並且我對 design有問題;我不想看到一個名爲「文件上傳」按鈕附近的文本框 –

回答

28

如果您正在尋找文件輸入元素的樣式,請查看open file dialog box in javascript。如果您正在尋找抓住與文件輸入要素相關的文件,你必須做這樣的事情:

inputElement.onchange = function(event) { 
    var fileList = inputElement.files; 
    //TODO do something with fileList. 
} 

有關FileList類型的詳細信息,請參閱this MDN article

請注意,上述代碼僅適用於支持File API的瀏覽器。例如,對於IE9及更早版本,您只能訪問文件名。輸入元素在非File API瀏覽器中沒有files屬性。

+0

thx;有用 。 –