2017-06-19 58 views
3
<input type="file" onchange="uploadFiles()" multiple/> 

在變量存儲輸入值和復位輸入欄後後空,變變空變量變成復位輸入字段

function uploadFiles(){ 
    var newFiles = $('input')[0].files; 
    $('input').replaceWith($('input').val('').clone(true)); 
    console.log(newFiles); // result == [] 
} 

請我該如何解決這個問題?

回答

1

$('input')[0].files爲您提供inputFileList屬性,該屬性附加到它。更改輸入的值將導致更改屬性及其所有賦值的值。

您可以解決的問題,通過添加文件到一個單獨的數組:

var newFiles = $('input')[0].files; 
var filesArray = []; 
for(var i=0; i<newFiles.length; i++){ 
    filesArray[i] = newFiles[i]; 
} 
$('input').replaceWith($('input').val('').clone(true)); 
console.log(newFiles); // result == [] 
console.log(filesArray); // result == [File] 

Demo

注:出於安全原因,你可能會或可能不會使用文件轉換後的打算原始輸入的值。我還沒有測試過它。如果您可以確認或揭穿,請發表評論。

+0

謝謝,它工作完美 – user7713452

1

這是因爲當您重置輸入字段時,第二次觸發了您的onchange事件。重置輸入字段被認爲是一個改變。

解決方法是在更新值時暫時禁用onchange事件。

// remove the change handler 
$('input').off('change', uploadFiles); 
$('input').val(''); 
// re-establish the change handler 
$('input').on('change', uploadFiles); 

注:這是不是在你的腳本混合聯事件處理程序(onchange="whatever")與處理一個好主意。你應該只是jQuery on()

+0

斑點。我正要關閉作爲重複:https://stackoverflow.com/questions/415483/clone-a-file-input-element-in-javascript – mplungjan

+0

他通過調用'.val('')'重置值,它不會自動觸發交換。 –

+0

@AlexandruSeverin調用'.val()'不是問題,它取代了被認爲是變化的輸入。 – Soviut