Czy można wyczyścić <input type='file' />
wartość kontrolną za pomocą jQuery? Próbowałem następujące:
$('#control').attr({ value: '' });
Ale to nie działa.
Łatwe: owijasz element <form>
wokół, wywołujesz reset formularza, a następnie usuwasz go za pomocą .unwrap()
. W przeciwieństwie do .clone()
innych rozwiązań w tym wątku, na końcu znajduje się ten sam element (w tym właściwości niestandardowe, które zostały w nim ustawione).
Testowane i działające w Opera, Firefox, Safari, Chrome i IE6 +. Działa również na innych typach elementów formularza, z wyjątkiem type="hidden"
.
window.reset = function(e) {
e.wrap('<form>').closest('form').get(0).reset();
e.unwrap();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input id="file" type="file">
<br>
<input id="text" type="text" value="Original">
</form>
<button onclick="reset($('#file'))">Reset file</button>
<button onclick="reset($('#text'))">Reset text</button>
Jak zauważa Timo poniżej, jeśli masz przyciski do wyzerowania pola wewnątrz <form>
, musisz wywołać .preventDefault()
zdarzenie, aby uniemożliwić <button>
wysłanie.
Nie działa w IE 11 z powodu nierozwiązanego błędu. Tekst (nazwa pliku) jest kasowany na wejściu, ale jego File
lista pozostaje zapełniona.
reset()
na np.reset2()
, ponieważ przynajmniej w Chrome wszystkie pola są wyczyszczone, jeśli tak jestreset()
. I dodaj event.preventDefault () po wyczyszczeniu wywołania, aby zapobiec przesłaniu. W ten sposób:<button onclick="reset2($('#file'));event.preventDefault()">Reset file</button>
. Przykład roboczy: jsfiddle.net/rPaZQ/23 .Szybka odpowiedź: wymień ją.
W poniższym kodzie używam
replaceWith
metody jQuery, aby zastąpić kontrolę klonem samego siebie. W przypadku, gdy masz jakiekolwiek procedury obsługi powiązane ze zdarzeniami w tym elemencie sterującym, my też chcemy je zachować. Aby to zrobić, przekazujemytrue
jako pierwszy parametrclone
metody.Fiddle: http://jsfiddle.net/jonathansampson/dAQVM/
Jeśli klonowanie, zachowując procedury obsługi zdarzeń, stwarza wszelkie problemy, które można rozważyć przy użyciu delegowania zdarzeń do obsługi kliknięć tej kontrolki z elementu nadrzędnego:
Zapobiega to konieczności klonowania procedur obsługi wraz z elementem podczas odświeżania formantu.
źródło
input.value = null;
Jquery ma zająć się problemami związanymi z przeglądarkami / starszymi przeglądarkami.
Działa to na nowoczesnych testowanych przeze mnie przeglądarkach: Chromium v25, Firefox v20, Opera v12.14
Korzystanie z jquery 1.9.1
HTML
Jquery
Na jsfiddle
Poniższe rozwiązanie javascript również działało dla mnie w wymienionych wyżej przeglądarkach.
Na jsfiddle
Nie mam możliwości przetestowania za pomocą IE, ale teoretycznie powinno to działać. Jeśli IE różni się na tyle, że wersja Javascript nie działa, ponieważ MS zrobiło to w inny sposób, moim zdaniem metoda jquery powinna sobie z tym poradzić, w przeciwnym razie warto wskazać to zespołowi jquery wraz z metoda wymagana przez IE. (Widzę ludzi mówiących: „to nie zadziała w IE”, ale nie ma javascript waniliowy, aby pokazać, jak to działa w IE (podobno „funkcja bezpieczeństwa”?)), Być może zgłosi to jako błąd do MS (jeśli by to zrobili licz to jako takie), aby naprawić w dowolnej nowszej wersji)
Jak wspomniano w innej odpowiedzi, post na forum jquery
Ale jquery usunęło teraz obsługę testowania przeglądarki, jquery.browser.
To rozwiązanie javascript również działało dla mnie, jest to waniliowy odpowiednik metody jquery.replaceWith .
Na jsfiddle
Należy zauważyć, że metoda cloneNode nie zachowuje powiązanych programów obsługi zdarzeń.
Zobacz ten przykład.
Na jsfiddle
Ale jquery.clone oferuje to [* 1]
Na jsfiddle
[* 1] jquery jest w stanie to zrobić, jeśli zdarzenia zostały dodane metodami jquery, ponieważ zachowuje kopię w jquery.data , nie działa inaczej, więc jest to trochę oszustwo / obejście i oznacza, że rzeczy nie są kompatybilny między różnymi metodami lub bibliotekami.
Na jsfiddle
Nie można pobrać dołączonej procedury obsługi zdarzeń bezpośrednio z samego elementu.
Oto ogólna zasada w javascript waniliowym, w ten sposób jquery i inne biblioteki robią to (z grubsza).
Na jsfiddle
Oczywiście jquery i inne biblioteki mają wszystkie inne metody wsparcia wymagane do prowadzenia takiej listy, to tylko demonstracja.
źródło
.val('')
. Czy nie jest to po prostu prostsze niż klonowanie elementu wysyłania lub dodawanie zagnieżdżonego formularza? +1..val("")
) JQuery działało idealnie, dzięki. Znacznie prostsze niż klonowanie danych wejściowych i ich zastępowanie.Z oczywistych względów bezpieczeństwa nie można ustawić wartości wejściowego pliku, nawet pustego ciągu.
Wszystko, co musisz zrobić, to zresetować formularz, w którym pole lub jeśli chcesz tylko zresetować dane wejściowe pliku formularza zawierającego inne pola, użyj tego:
Oto przykład: http://jsfiddle.net/v2SZJ/1/
źródło
To działa dla mnie.
http://forum.jquery.com/topic/how-to-clear-a-file-input-in-ie
Mam nadzieję, że to pomoże.
źródło
W IE8 zmieniono pole Przesyłanie plików tylko do odczytu dla bezpieczeństwa. Zobacz post na blogu zespołu IE :
źródło
$("#control").val('')
to wszystko czego potrzebujesz! Testowane w Chrome przy użyciu JQuery 1.11Inni użytkownicy testowali również w Firefoksie.
źródło
Utknąłem ze wszystkimi opcjami tutaj. Oto zrobiony przeze mnie hack, który zadziałał:
i możesz uruchomić reset za pomocą jQuery z kodem podobnym do tego:
(jsfiddle: http://jsfiddle.net/eCbd6/ )
źródło
Skończyło się na tym:
może nie jest to najbardziej eleganckie rozwiązanie, ale działa, o ile wiem.
źródło
Użyłem https://github.com/malsup/form/blob/master/jquery.form.js , który ma funkcję o nazwie
clearInputs()
crossbrowser, dobrze przetestowana, łatwa w użyciu i obsługuje również problemy z IE oraz usuwanie ukrytych pól Jeśli potrzebne. Być może trochę długie rozwiązanie, aby wyczyścić tylko dane wejściowe pliku, ale jeśli masz do czynienia z przesyłaniem plików crossbrowser, to rozwiązanie jest zalecane.Użycie jest łatwe:
źródło
Wartość danych wejściowych pliku jest tylko do odczytu (ze względów bezpieczeństwa). Nie można go programowo wyczyścić (inaczej niż poprzez wywołanie metody reset () formularza, który ma szerszy zakres niż tylko to pole).
źródło
Udało mi się uruchomić mój przy użyciu następującego kodu:
źródło
Szukałem prostego i czystego sposobu na wyczyszczenie danych wejściowych do pliku HTML, powyższe odpowiedzi są świetne, ale żadna z nich tak naprawdę nie odpowiada temu, czego szukam, dopóki nie natknąłem się na Internet z prostym, eleganckim sposobem:
wszystkie podziękowania należą się Chrisowi Coyierowi .
źródło
Ta
.clone()
rzecz nie działa w Operze (i ewentualnie innych). Zachowuje treść.Najbliższą dla mnie metodą była wcześniejsza metoda Jonathana, jednak upewnienie się, że pole zachowało swoją nazwę, klasy itp. Stworzyło niechlujny kod w moim przypadku.
Coś takiego może działać dobrze (również dzięki Quentin):
źródło
Udało mi się to uruchomić za pomocą następujących ...
Zostało to przetestowane w IE10, FF, Chrome i Opera.
Istnieją dwa zastrzeżenia ...
Nadal nie działa poprawnie w FF, jeśli odświeżysz stronę, element pliku zostanie ponownie wypełniony wybranym plikiem. Skąd czerpię te informacje, jestem poza mną. Co jeszcze związane z elementem wejściowym pliku mogę spróbować usunąć?
Pamiętaj, aby używać delegowania we wszystkich zdarzeniach, które zostały dołączone do elementu wejściowego pliku, aby nadal działały po utworzeniu klonu.
Nie rozumiem jednak, kto na świecie myślał, że niedopuszczenie do wyczyszczenia pola wejściowego z nieprawidłowego niedopuszczalnego wyboru pliku było dobrym pomysłem?
OK, nie pozwól mi dynamicznie ustawiać wartości, aby nie można było ługować plików z systemu operacyjnego użytkownika, ale pozwól mi wyczyścić niepoprawny wybór bez resetowania całego formularza.
To nie jest tak, że „akceptuj” robi coś innego niż filtr, aw IE10 nawet nie rozumie typów mimów MS Word, to żart!
źródło
.pop()
tablicy plików zamiast ustawienia wartości null. wydaje się, że poprawnie wyczyściło to plik.Na moim Firefoksie 40.0.3 działa tylko z tym
źródło
działa dla mnie w każdej przeglądarce.
źródło
Wypróbowałem większość technik wymienionych przez użytkowników, ale żadna z nich nie działała we wszystkich przeglądarkach. tj .: clone () nie działa w FF dla danych wejściowych pliku. Skończyło się na ręcznym skopiowaniu pliku wejściowego, a następnie zastąpieniu oryginału skopiowanym. Działa we wszystkich przeglądarkach.
źródło
źródło
Działa to z Chrome, FF i Safari
Może nie współpracować z IE lub Operą
źródło
Ustaw go jako asynchroniczny i zresetuj po wykonaniu żądanych działań przycisku.
źródło
źródło
nie działa mi:
więc w asp mvc używam funkcji maszynki do golenia do zamiany danych wejściowych pliku. najpierw utwórz zmienną dla ciągu wejściowego o Id i Nazwa, a następnie użyj jej do wyświetlenia na stronie i zastąpienia przycisku resetowania:
źródło
Prostym sposobem jest zmiana typu wejścia i zmiana go z powrotem.
Coś takiego:
źródło
Możesz zastąpić go takim klonem
Ale to klonuje też swoją wartość, więc lepiej to zrobić
źródło
To łatwe lol (działa we wszystkich przeglądarkach [oprócz opery]):
JS Fiddle: http://jsfiddle.net/cw84x/1/
źródło
Co? W funkcji sprawdzania poprawności po prostu wstaw
Zakładając, że przesyłanie to nazwa:
Używam JSP, nie jestem pewien, czy to robi różnicę ...
Działa dla mnie i myślę, że jest o wiele łatwiej.
źródło