2015-12-14 14 views
5

Considerate questo:incendi Firefox su scegliere, non sul cambiamento

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

Anche se si sceglie lo stesso file e il valore filePicker non cambia, vedrete la finestra di avviso in Firefox. Qualche soluzione?

+0

Basta tenere il valore precedente da qualche parte e confronto - se è uguale a quello nuovo, ignorare. – Piskvor

+0

Basta tenere un record del nome file in una variabile e controllare se il nuovo valore è uguale a quello precedente. Se non lo è, esegui il codice. – Andy

+0

@Piskvor: non so come farlo. – Mori

risposta

2

utilizzare una variabile temporanea per contenere il nome del nome del file che è possibile controllare la prossima volta che si seleziona un file:

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

Bel approccio! Grazie! – Mori

1

Eseguire il frammento di seguito. Dirà "Nuovo file!" quando c'è un nuovo file per Chrome e 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">