2015-12-14 191 views
5

考慮一下:火狐火災,不改變

<input type="file" id="filePicker"> 
<script> 
    document.getElementById('filePicker').onchange = function() { 
     alert('Hi!'); 
    }; 
</script> 

即使選擇相同的文件和filePicker價值不會改變,你會看到提示框在Firefox。任何解決方案

+0

只要保持前值的地方,並進行比較 - 如果它是一樣的新的,不容忽視。 – Piskvor

+0

只需在變量中保存一個文件名的記錄,並檢查新值是否與舊值相同。如果不是,請運行代碼。 – Andy

+0

@Piskvor:我不知道該怎麼做。 – Mori

回答

2

使用一個臨時變量來保存你可以檢查你選擇一個文件,下一次的文件名的名字:

var filenameTemp = null; 
document.getElementById('filePicker').onchange = function(e) { 
    var filename = e.target.value; 
    if (filename !== filenameTemp) { 
    filenameTemp = filename; 
    console.log('OK'); 
    // other code 
    } else { 
    console.log('Not OK') 
    } 
}; 

DEMO

+0

不錯的做法!謝謝! – Mori

1

運行下面的代碼片段。它會說「新文件!」當Chrome和Firefox都有新文件時。

var previousFile = {}; 
 

 
function isSame(oldFile, newFile) { 
 
    return oldFile.lastModified === newFile.lastModified && 
 
    oldFile.name === newFile.name && 
 
    oldFile.size === newFile.size && 
 
    oldFile.type === newFile.type; 
 
} 
 

 
document.getElementById('filePicker').onchange = function() { 
 
    var currentFile = this.files[0]; 
 
    
 
    if (isSame(previousFile, currentFile) === false) { 
 
    alert('New File!'); 
 
    previousFile = currentFile; 
 
    } 
 
};
<input type="file" id="filePicker">