Chcę wyczyścić dane wejściowe pliku w moim formularzu.
Wiem o ustawianiu źródeł na tę samą metodę ... Ale ta metoda nie usunie wybranej ścieżki pliku.
Uwaga : chciałbym uniknąć konieczności ponownego ładowania strony, resetowania formularza lub wykonywania połączenia AJAX.
czy to możliwe?
javascript
html
thomaux
źródło
źródło
Istnieją 3 sposoby na wyczyszczenie danych wejściowych za pomocą javascript:
ustaw właściwość value na pustą lub null.
Działa dla IE11 + i innych nowoczesnych przeglądarek.
Utwórz nowy element wejściowy pliku i zastąp stary.
Wadą jest utrata detektorów zdarzeń i właściwości expando.
Zresetuj formularz właściciela za pomocą metody form.reset ().
Aby uniknąć wpływu na inne elementy wejściowe w tym samym formularzu właściciela, możemy utworzyć nowy pusty formularz i dołączyć element wejściowy pliku do tego nowego formularza i zresetować go. W ten sposób działa dla wszystkich przeglądarek.
Napisałem funkcję javascript. demo: http://jsbin.com/muhipoye/1/
źródło
tl; dr : W przypadku nowoczesnych przeglądarek po prostu użyj
Stara odpowiedź:
Co powiesz na:
Nadal muszę zrozumieć, dlaczego to nie działa z zestawem webkit .
W każdym razie działa to z IE9>, Firefox i Operą.
Sytuacja z webkitem polega na tym, że wydaje mi się, że nie mogę zmienić go z powrotem do pliku.
W przypadku IE8 sytuacja jest taka, że zgłasza wyjątek bezpieczeństwa.
Edycja: W przypadku Webkit, Opera i Firefox działa to jednak:
(sprawdź powyższą odpowiedź z tą propozycją)
Zobaczę, czy uda mi się znaleźć przyjemniejszy, bardziej przejrzysty sposób na zrobienie tej między przeglądarkami bez potrzeby GC.
Edit2:
Działa z większością przeglądarek. Nie działa z IE <9, to wszystko.
Testowane na firefox 20, chrome 24, opera 12, IE7, IE8, IE9 i IE10.
źródło
Ustawienie wartości na
''
nie działa we wszystkich przeglądarkach.Zamiast tego spróbuj ustawić wartość
null
tak:EDYCJA: Dostaję bardzo ważne powody bezpieczeństwa, aby nie pozwolić JS na ustawienie danych wejściowych pliku, jednak wydaje się rozsądne zapewnienie prostego mechanizmu czyszczenia już wybranych danych wyjściowych. Próbowałem użyć pustego ciągu, ale nie działało to we wszystkich przeglądarkach,
NULL
działał we wszystkich przeglądarkach, które próbowałem (Opera, Chrome, FF, IE11 + i Safari).EDYCJA: Należy pamiętać, że ustawienie
NULL
działa we wszystkich przeglądarkach, a ustawienie na pusty ciąg nie działa.źródło
all browsers
... nie działa w IE8, IE9 lub IE10 (ale działa w IE11).Niestety żadna z powyższych odpowiedzi nie wydaje się obejmować wszystkich podstaw - przynajmniej nie w przypadku moich testów z javascriptem waniliowym.
.value = null
wydaje się działać na FireFox, Chome, Opera i IE11 (ale nie IE8 / 9/10 ).cloneNode
(i.clone()
jQuery) na FireFox wydaje się kopiować.value
over, przez co klonowanie jest bezcelowe.Oto napisana przeze mnie funkcja javascript vanilla, która działa na FireFox (27 i 28), Chrome (33), IE (8, 9, 10, 11), Opera (17) ... to są jedyne obecnie dostępne przeglądarki do mnie do przetestowania.
ctrl
Parametrem jest plik wejściowy sama, więc funkcja będzie wywoływana jako ...źródło
if
oświadczenie nie powinno być umieszczone wewnątrzcatch
bloku?null
. Masz ochotę wyjaśnić, jaki jest sens umieszczaniactrl.value = null;
wtry...catch
bloku? Przepraszam za nowe pytanie.ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
- w którym momencie faktycznie usuwamy wartość, skorocloneNode
również ją kopiuje?ROZWIĄZANIE
Poniższy kod działał dla mnie z jQuery. Działa w każdej przeglądarce i pozwala zachować zdarzenia i niestandardowe właściwości.
PRÓBNY
Zobacz to jsFiddle aby uzyskać kod i demonstrację.
SPINKI DO MANKIETÓW
Czyszczenie <input type = 'file' /> za pomocą jQuery
Jak zresetować dane wejściowe pliku za pomocą JavaScript
źródło
Musisz go zastąpić nowym wejściem pliku. Oto, jak można to zrobić za pomocą jQuery:
i użyj tej linii, gdy chcesz wyczyścić pole wejściowe (na przykład w niektórych zdarzeniach):
źródło
Edycja:
ten nie działa w IE i operze, ale wydaje się działać z przeglądarkami Firefox, Safari i Chrome.
źródło
Miałem ten sam problem i wpadłem na to.
źródło
To całkiem proste.
źródło
Szukałem prostego i przejrzystego sposobu na wyczyszczenie danych wejściowych z pliku HTML, powyższe odpowiedzi są świetne, ale żadna z nich tak naprawdę nie odpowiada na to, czego szukam, dopóki nie znalazłem w Internecie prostego i eleganckiego sposobu na zrobienie tego:
cała zasługa Chrisa Coyiera .
źródło
Powyższe odpowiedzi oferują nieco niezdarne rozwiązania z następujących powodów:
Nie lubię konieczności a potem coraz html, jest bardzo zaangażowany i brudne.
wrap
input
JS między przeglądarkami jest przydatny i wydaje się, że w tym przypadku jest zbyt wiele niewiadomych, aby niezawodnie używać
type
przełączania (które, znowu, jest trochę brudne) i ustawianiavalue
na''
Więc oferuję Ci moje rozwiązanie oparte na jQuery:
Robi to, co mówi, zastępuje dane wejściowe klonem samego siebie. Klon nie będzie miał wybranego pliku.
Zalety:
Wynik: szczęśliwy programista
źródło
Cross browser compatibility
... moje testy pokazują, że FireFox kopiuje.value
jako część pliku.clone()
, co czyni go bezużytecznymreplaceWith
? Używamclone()
siebie i działa dobrze w przeglądarce Firefox (nie wiem, czy rok później nadal tak jest =))Oto moje dwa centy, pliki wejściowe są przechowywane jako tablice, więc oto jak je wyzerować
zwraca to pustą tablicę i działa we wszystkich przeglądarkach
źródło
Pomogło mi to, że zamiast wyczyścić kolejkę próbowałem pobrać i przesłać ostatni wybrany plik za pomocą pętli i zadziałało. Oto kod.
Mam nadzieję, że to może niektórym pomóc.
źródło
Wypróbowałem większość rozwiązań, ale wydawało się, że nikt nie działa. Jednak poniżej znalazłem spacer.
Konstrukcja formy jest:
form
=>label
,input
isubmit button
. Po wybraniu pliku nazwa pliku zostanie wyświetlona obok etykiety, robiąc to ręcznie w JavaScript.Więc moja strategia jest taka: początkowo przesyłanie
button
jest wyłączone, po wybraniu plikudisabled
atrybut przycisku przesyłania zostanie usunięty, tak że mogę przesłać plik. Po przesłaniu wyczyszczę,label
co sprawia, że wygląda na to, że wyczyściłem plik,input
ale w rzeczywistości nie. Następnie ponownie wyłączę przycisk przesyłania, aby uniemożliwić przesłanie formularza.Ustawiając przesyłanie
button
disable
lub nie, zatrzymuję przesyłanie pliku wiele razy, chyba że wybiorę inny plik.źródło
Zmieniłem wpisywanie tekstu i powrót do wpisywania do pliku za pomocą setAttribute
źródło