<input type="file"/>
Il file e il percorso vengono cancellati dopo aver fatto clic su Annulla nella finestra modale 'scegli file' in chrome, in FF e IE il file rimane intatto dopo aver premuto cancel. C'è un modo per cambiare questo comportamento in chrome?tipo di input = "file", cancellando il file dopo aver fatto clic su cancel in chrome
risposta
questa è la risposta alla tua domanda non è possibile anche rilevare quando il pulsante cancel
si fa clic:
Per motivi di sicurezza non è possibile impostare il valore del file di input in js – Powerslave
https://jsfiddle.net/dqL97q0b/1/
Ecco un lavoro in giro, in modo che Chrome non può remove il file esistente degli utenti quando viene premuto cancel.
Note sul codice: Questo rende un clone dell'elemento Dom quando l'utente apre il selettore file se è già selezionato un file. Quindi, se l'utente fa clic su Annulla in Chrome, attiva la modifica Event Listener e il valore sarà "", quindi in quel caso specifico rimuovo il selettore di file ora vuoto e ripristino il clone.
Nota: ogni elemento Dom chooser richiede un ID univoco, in modo che il clone possa essere memorizzato e richiamato correttamente.
Nota: La maggior parte del codice è solo la registrazione, per mostrare come funzionano le cose, in particolare ho voluto sottolineare che se si utilizzano i listener di eventi in linea nella Dom elemento come onclick = "fileClicked (evento)" poi non è necessario ricollegare i listener di eventi al clone.
<!doctype html><html><head></head><body>
<h2>Fix for Chrome Removing File when 'cancel' clicked</h2>
Upload Image: <input id="imageUpload" type="file" onclick="fileClicked(event)" onchange="fileChanged(event)">
<br/><br/>
<label for="videoUpload">Upload Video:</label> <input id="videoUpload" type="file" onclick="fileClicked(event)" onchange="fileChanged(event)">
<br/><br/>
<div id="log"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
//This is All Just For Logging:
var debug = true;//true: add debug logs when cloning
var evenMoreListeners = true;//demonstrat re-attaching javascript Event Listeners (Inline Event Listeners don't need to be re-attached)
if (evenMoreListeners) {
var allFleChoosers = $("input[type='file']");
addEventListenersTo(allFleChoosers);
function addEventListenersTo(fileChooser) {
fileChooser.change(function (event) { console.log("file(#" + event.target.id + ") : " + event.target.value.split("\\").pop()) });
fileChooser.click(function (event) { console.log("open(#" + event.target.id + ")") });
}
}
var clone = {};
// FileClicked()
function fileClicked(event) {
var fileElement = event.target;
if (fileElement.value != "") {
if (debug) { console.log("Clone(#" + fileElement.id + ") : " + fileElement.value.split("\\").pop()) }
clone[fileElement.id] = $(fileElement).clone(); //'Saving Clone'
}
//What ever else you want to do when File Chooser Clicked
}
// FileChanged()
function fileChanged(event) {
var fileElement = event.target;
if (fileElement.value == "") {
if (debug) { console.log("Restore(#" + fileElement.id + ") : " + clone[fileElement.id].val().split("\\").pop()) }
clone[fileElement.id].insertBefore(fileElement); //'Restoring Clone'
$(fileElement).remove(); //'Removing Original'
if (evenMoreListeners) { addEventListenersTo(clone[fileElement.id]) }//If Needed Re-attach additional Event Listeners
}
//What ever else you want to do when File Chooser Changed
}
</script>
</body></html>
soluzione semplice ma efficace: mantenere un riferimento al file in una variabile. Ogni volta che l'evento di modifica dell'ingresso si è sparato controllare:
if(input.files[0]) // truthy, falsey
{
var file = input.files[0];
}
Così file
conterrà l'ultimo file selezionato e quando l'utente apre la finestra di dialogo, ma annullato non verrà modificato il riferimento al file e contiene ancora la precedenza file selezionato.
- 1. Input File Fai clic su Chrome
- 2. Comportamento strano dopo aver fatto clic sui campi di input in Chrome e Safari
- 3. Android Non ignorare AlertDialog dopo aver fatto clic su PositiveButton
- 4. Conferma la casella dopo aver fatto clic su Collegamento ipertestuale
- 5. Dopo aver fatto clic su aggiungi figlio con campo di input come albero
- 6. Rimuovere la notifica dopo aver fatto clic su
- 7. Cambia il testo del pulsante dopo il clic, quindi ripristinalo dopo aver fatto nuovamente clic
- 8. Come mostrare l'immagine dopo aver fatto clic sull'immagine in modale?
- 9. Il browser Android aggiorna la pagina dopo aver selezionato il file tramite l'elemento di input
- 10. Il pulsante VBA Excel si ridimensiona dopo aver fatto clic su di esso (pulsante di comando)
- 11. Pulsante disabilitato dopo aver fatto clic sul numero
- 12. Mostra gif di caricamento dopo aver fatto clic su Invia modulo utilizzando jQuery
- 13. Evita il crash dopo aver fatto mmap() su un file smontato
- 14. Come cancellare una casella di testo dopo aver fatto clic su un pulsante in WPF?
- 15. Come inviare il modulo una sola volta dopo aver fatto più clic su Invia?
- 16. Come mantenere il contenuto della pagina Web precedente dopo aver fatto clic su un collegamento?
- 17. Quando javascript interrompe l'esecuzione su una pagina dopo aver fatto clic su un collegamento?
- 18. Focus di input Knockout.js dopo il clic
- 19. Come si verifica la disattivazione di un pulsante di invio dopo aver fatto clic su capybara?
- 20. jQuery - Posiziona il cursore nel campo di input quando il collegamento ha fatto clic su
- 21. Heroku sta cancellando file su git push?
- 22. Attività di apertura dopo aver fatto clic su notifica push android
- 23. Sostituisci tipo di input = file con un'immagine
- 24. div jump dopo aver fatto scorrere verso il basso
- 25. Mantieni la api schermo intero a schermo intero dopo aver fatto clic su un collegamento
- 26. Splinter o selenio: possiamo ottenere la pagina html corrente dopo aver fatto clic su un pulsante?
- 27. UITabBarItems in UITabBar mostra dopo aver fatto clic sull'elemento non all'avvio dell'applicazione
- 28. necessario aggiornare la pagina Web dopo aver fatto clic su Chiudi finestra pop-up
- 29. Non eseguire lo snap al contrassegno dopo aver fatto clic su android map v2
- 30. Prevenire l'invio del modulo dopo aver fatto clic sul pulsante di invio utilizzando il pulsante Annulla
Potresti creare un violino e mostrarci esattamente cosa intendi? Grazie :) – GFP