Czy jest szansa na wykrycie każdego wyboru pliku dokonanego przez użytkownika dla elementu HTML input
typu file
?
To było zadawane wiele razy wcześniej, ale zwykle proponowane onchange
zdarzenie nie jest uruchamiane, jeśli użytkownik ponownie wybierze ten sam plik.
javascript
html
forms
dom-events
dronus
źródło
źródło
input
wartość s na '' po zrobieniu czegoś z plikiem. Ale to też usunie widoczną nazwę pliku. Może to być w porządku, ponieważ plik jest faktycznie przetwarzany, a wynik tej akcji może pojawić się gdzie indziej.file
wejścioweonchange
nie przypomina.Odpowiedzi:
Ustaw wartość na
input
dlanull
każdegoonclick
zdarzenia. Spowoduje to zresetowanieinput
wartości i wyzwolenieonchange
zdarzenia, nawet jeśli zostanie wybrana ta sama ścieżka.Oto DEMO .
Uwaga: To normalne, jeśli plik ma przedrostek „C: \ fakepath \”. Jest to funkcja bezpieczeństwa uniemożliwiająca JavaScriptowi rozpoznanie bezwzględnej ścieżki pliku. Przeglądarka nadal wie o tym wewnętrznie.
źródło
this.value = null
na końcu,onchange
ponieważ można aktywować element wejściowy bez klikania go (za pomocą klawiatury). Możesz przechowywać,input.files
jeśli chcesz odwołać się do nich później.this.value=null;
jest konieczne tylko w Chrome, Firefox będzie działał dobrze tylko zreturn false;
Oto FIDDLE
źródło
W tym artykule pod tytułem „Korzystanie z formularza do wyboru”
http://www.html5rocks.com/en/tutorials/file/dndfiles/
Dodaje detektor zdarzeń do „zmiany”, ale przetestowałem go i uruchamia się, nawet jeśli wybierzesz ten sam plik, a nie, jeśli anulujesz.
źródło
change
zdarzenie będzie uruchamiane tylko przy zmianach nazw plików.Użyj zdarzenia onClick, aby wyczyścić wartość docelowego wejścia za każdym razem, gdy użytkownik kliknie pole. Dzięki temu zdarzenie onChange zostanie uruchomione również dla tego samego pliku. Pracował dla mnie :)
Korzystanie z TypeScript
źródło
Rób wszystko, co chcesz, po pomyślnym załadowaniu pliku. Tuż po zakończeniu przetwarzania pliku ustaw wartość kontroli pliku na pusty łańcuch. Więc .change () będzie zawsze wywoływane, nawet jeśli nazwa pliku się zmieni, czy nie. na przykład możesz to zrobić i pracowałeś dla mnie jak urok
źródło
źródło
Wyczyszczenie wartości 0 indeksu danych wejściowych działało dla mnie . Wypróbuj poniższy kod, mam nadzieję, że to zadziała (AngularJs).
źródło