<input type="file"/>
Plik i jego ścieżka jest czyszczona po kliknięciu Anuluj w oknie "wybierz plik" w chrome, w pliku FF i IE pozostaje nietknięta po naciśnięciu Anuluj. Czy istnieje sposób, aby zmienić to zachowanie w chrome?typ wejścia = "plik", czyszczenie pliku po kliknięciu Anuluj w chrome
Odpowiedz
Jest to odpowiedź na twoje pytanie nie można nawet wykryć kiedy przycisk cancel
kliknięciu:
Jest to niemożliwe ze względów bezpieczeństwa, nie można ustawić wartości wejścia pliku w js – Powerslave
https://jsfiddle.net/dqL97q0b/1/
Oto obejść, tak że Chrome nie może Usuń użytkownicy istniejący plik po anulowaniu jest wciśnięty.
Kod Uwagi: To sprawia, że klon elementu Dom, gdy użytkownik otwiera wybieracz plików, jeśli jest już wybrany plik. Następnie, jeśli użytkownik kliknie przycisk Anuluj w chrome, uruchomi zmianę odbiornika zdarzeń, a wartość będzie "", więc w tym konkretnym przypadku usuwam teraz pusty wybieracz plików i przywracam klon.
Uwaga: każdy element wyboru pliku Dom Element potrzebuje unikalnego identyfikatora, aby klon mógł być prawidłowo zapisany i pobrany.
Uwaga: Większość kodu jest tylko zalogowaniu, aby pokazać, jak to wszystko działa, a konkretnie chciałem podkreślić, że w przypadku korzystania z detektorów zdarzeń inline w DOM element taki jak onclick = „fileClicked (event)” następnie nie musisz ponownie dołączać detektorów zdarzeń do klonu.
<!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>
Proste, ale skuteczne rozwiązanie: zachować odniesienie do pliku w zmiennej. Za każdym razem, gdy zdarzenie Zmiana wejścia jest zwolniony sprawdzić:
if(input.files[0]) // truthy, falsey
{
var file = input.files[0];
}
Więc file
będzie zawierał najnowsze wybrany plik i gdy użytkownik otwiera okno ale zaprzepaszczone odniesienie plik nie zostanie zmieniona i nadal zawiera uprzednio wybrany plik.
- 1. Flask: Pobierz plik csv po kliknięciu przycisku
- 2. Zmniejszenie 2 kroków do 1.ep po kliknięciu na typ wejścia = data
- 3. typ wejścia = resetowanie i nokautowanie
- 4. Czy istnieje sposób czyszczenia przed zamknięciem aplikacji po kliknięciu opcji Zatrzymaj przesyłanie w rozszerzeniu chrome?
- 5. Czyszczenie po przeprowadzeniu wszystkich testów
- 6. Odtwórz plik dźwiękowy po kliknięciu obrazu
- 7. Czyszczenie po konflikcie git merge?
- 8. Ustal Jeśli Print/Anuluj Przycisk w Google Chrome Print Preview kliknięciu
- 9. preventDefault() po kliknięciu klawisza tabulatora wewnątrz obszaru tekstowego w Chrome
- 10. Nawigacja Znikająca w przeglądarce Chrome po przewinięciu i kliknięciu
- 11. typ wejścia - przycisk powrotu?
- 12. Automatyczne uruchamianie JNLP po kliknięciu
- 13. Plik D funkcje wejścia/wyjścia
- 14. Obliczanie plik przesunięcie punktu wejścia w pliku PE
- 15. Linki nie są aktywne po kliknięciu na Chrome
- 16. Wyświetl plik PDF po kliknięciu linku w WebView android
- 17. Czyszczenie wejścia cin: czy cin.ignore nie jest dobrą metodą?
- 18. Anuluj AsyncTask po pewnym czasie
- 19. Anuluj UIScrollView bounce po przeciągnięciu
- 20. Jak utworzyć niestandardowy typ wejścia?
- 21. Javascript: Jak przejąć typ danych = przesłać po kliknięciu?
- 22. Jak wykonać czyszczenie po SIGKILL?
- 23. Anuluj miejsca po wartości Integer'Image w Ada
- 24. Typ wejścia HTML5 = zmiana kroku zmiany numeru
- 25. Odtwarzanie pliku dźwiękowego z Internetu po kliknięciu przycisku
- 26. Jak ustawić podgląd pliku wideo, wybierając z typu wejścia = "plik"
- 27. Zdarzenie do przesłania pliku anuluj w javascript
- 28. Sposób wstrzymania pliku wsadowego Windows po dwukrotnym kliknięciu?
- 29. Jak otworzyć kontakty po kliknięciu przycisku zdefiniowanego w pliku main.xml
- 30. Wyłączyć po kliknięciu w InfoWindows?
Czy możesz stworzyć skrzypce i pokazać nam dokładnie, co masz na myśli? Dziękuję :) – GFP