2014-01-29 153 views
0

我正在編寫一個HTA,並希望用戶能夠輕鬆地使用瀏覽器來選擇.txt文件。這個.txt文件將被逐行閱讀並讀入一個數組。所以,我使用<input type=file name="ListFile">,它給了我瀏覽功能,並做我需要它...清除<input type = file>

但我需要能夠清除<input type=file name="ListFile">當用戶選擇另一種方法,我已經設置,輸入數據。

我需要清除的原因是爲了防止用戶錯誤/錯誤。我目前已經設置了在使用瀏覽選項時清除手動輸入文本框,但無法讓其以相反的方式工作。

我曾嘗試以下(這在常規的文本框的作品)

Document.getElementByID("ListFile").value = "" 
Document.getElementByID("ListFile").reset() 
Docuemnt.getElementByID("ListFile").innerHTMl = "" 
ListFile.Value = "" 

這些明確的文本框中。

+1

你必須調用reset()的形式 –

回答

0

出於安全原因,您無法在文件輸入字段中修改所選文件。

有一個解決方法來重置它 - 您可以克隆文件輸入,並用克隆的輸入替換輸入。根據用戶的選擇顯示/隱藏輸入可能會更容易。

例如,您可以有一組單選按鈕供用戶選擇輸入法 - 然後根據他們選擇的單選按鈕顯示相應的字段。

如果您絕對必須重置文件輸入,您可以使用jQuery的.clone()方法,或手動創建新的dom元素,複製所有屬性,將其插入原始文件輸入後,然後刪除原始文件。

+0

感謝Sam Dufel ...你給了我一個主意。 創建的上Window_onLoad創建 跨度代碼跨度: <跨度ID = 「BrowseFile」> Window_onLoad代碼: BrowseFile.innerHTML = 「」 然後我將它複製到另一個Sub,選擇手動數據輸入選項。基本上清除跨度並重新創建輸入。 – DavidRyan520

+0

你有任何例子?任何jsfiddle?或者是其他東西 –

0

感謝Sam Dufel ......你給了我一個主意。

創建創建上Window_onLoad

跨度碼跨度:

Window_onLoad代碼: BrowseFile.innerHTML = 「」

我那麼這個複製到時,他們選擇運行另一個子手動數據輸入選項。基本上清除跨度並重新創建輸入。

0

您無法更改文件輸入類型的值,因爲這會引入安全漏洞。相反,只需用新文件替換文件輸入即可。取而代之的$('#file').val(''),這樣做:

$('#file').replaceWith('<input name="ListFile" type="file" id="file"/>'); 

更妙的是克隆的原始版本的副本,並將其存儲在內存中。當你需要替換它時,只需使用克隆副本,然後再克隆它。所以,這樣的事情:

$(document).ready(function() { 
    var empty_input = $('#file').clone(); 

    $('#the-form').on('change', '#file', function(el) { 
     $('#the-form').submit(); // assuming the target is a hidden iframe 
     $(this).replaceWith(empty_input.clone()); 
    }); 
}) 

請注意,我使用委派的版本jQuery.on()因此事件仍然會在它的更換右後新的輸入工作。