Mam formularz ze standardowym przyciskiem resetowania zakodowanym w następujący sposób:
<input type="reset" class="button standard" value="Clear" />
Problem w tym, że wspomniana forma ma charakter wieloetapowy, więc jeśli użytkownik wypełni etap, a następnie wróci później, zapamiętane wartości dla różnych pól nie zostaną zresetowane po kliknięciu przycisku Wyczyść.
Myślę, że dołączenie funkcji jQuery w celu zapętlenia wszystkich pól i wyczyszczenia ich „ręcznie” załatwi sprawę. Już korzystam z jQuery w formularzu, ale dopiero zaczynam działać, więc nie jestem pewien, jak sobie z tym poradzić, oprócz indywidualnego odwoływania się do każdego pola według identyfikatora, co nie wydaje się zbyt wydajne.
TIA za wszelką pomoc.
not()
jeśli twój formularz ma jakieś ukryte dane wejściowe.Odpowiedzi:
zaktualizowany w marcu 2012 r.
Dwa lata po tym, jak pierwotnie odpowiedziałem na to pytanie, wróciłem, aby przekonać się, że właściwie zmieniło się to w wielki bałagan. Wydaje mi się, że nadszedł czas, aby do niego wrócić i naprawdę poprawić swoją odpowiedź, ponieważ jest ona najbardziej pozytywnie oceniana + zaakceptowana.
Dla przypomnienia, odpowiedź Titi jest błędna, ponieważ nie jest to prośba oryginalnego plakatu - prawdą jest, że możliwe jest zresetowanie formularza przy użyciu natywnej metody reset (), ale to pytanie próbuje usunąć formularz z zapamiętanego wartości, które pozostałyby w formularzu, jeśli zresetujesz go w ten sposób. Dlatego potrzebny jest reset „ręczny”. Zakładam, że większość osób znalazła się w tym pytaniu z wyszukiwarki Google i naprawdę szuka metody reset (), ale to nie działa w konkretnym przypadku, o którym mówi OP.
Moja pierwotna odpowiedź brzmiała:
Co może działać w wielu przypadkach, w tym dla PO, ale jak wskazano w komentarzach i innych odpowiedziach, wyczyści elementy radia / pola wyboru z wszelkich atrybutów wartości.
Bardziej poprawna odpowiedź (ale nie doskonała) to:
Używanie
:text
,:radio
itd selektorów przez siebie jest uważane za złą praktyką przez jQuery, ponieważ kończy się oceny na*:text
co sprawia, że znacznie dłużej niż powinno. Wolę podejście z białej listy i żałuję, że nie użyłem go w mojej oryginalnej odpowiedzi. W każdym razie, podającinput
część selektora oraz pamięć podręczną elementu formularza, powinno to uczynić ją najlepszą odpowiedzią tutaj.Ta odpowiedź może nadal mieć pewne wady, jeśli domyślne ustawienie wybranych elementów przez ludzi nie jest opcją, która ma pustą wartość, ale z pewnością jest tak ogólne, jak się da, i należy to rozpatrywać indywidualnie .
źródło
.val('')
resetuje wszystkie wartości,''
nawet jeśli te wartości są używane w przyciskach opcji i polach wyboru. Kiedy uruchamiam powyższy kod, tracę cenne informacje z formularza, a nie tylko to, co wprowadził użytkownik.From http://groups.google.com/group/jquery-dev/msg/2e0b7435a864beea :
ustawienie
myinput.val('')
może nie emulować „resetu” w 100%, jeśli masz takie dane wejściowe:Np. Wywołanie
myinput.val('')
wejścia o wartości domyślnej 50 ustawiłoby go na pusty ciąg, podczas gdy wywołaniemyform.reset()
zresetowałoby go do wartości początkowej 50.źródło
Jest duży problem z zaakceptowaną odpowiedzią Paolo. Rozważać:
.val('')
Linia będzie również wyczyścić każdyvalue
jest przypisany do wyboru i przycisków radiowych. Więc jeśli (jak ja) robisz coś takiego:Użycie zaakceptowanej odpowiedzi przekształci twoje dane wejściowe w:
Ups - używałem tej wartości!
Oto zmodyfikowana wersja, która zachowa twoje pole wyboru i wartości radiowe:
źródło
select
elementach. Czy może to Pan naprawić?:text
,:password
itp selektorów przez siebie bez określaniainput
udziału, w przeciwnym razie zwraca wartość*:text
, która przechodzi przez każdy element w dokumencie zamiast zaledwie<input>
tagów zinput:text
#myFormId
kontekstu przekazanego jako drugi argument do$()
- to znaczy$(':input', '#context')
- jest to identyczne z$('#context').filter(':input')
jQuery Plugin
Stworzyłem wtyczkę jQuery, dzięki czemu mogę jej używać wszędzie tam, gdzie jej potrzebuję:
Teraz mogę go użyć, dzwoniąc:
źródło
.prop("checked", false)
? stackoverflow.com/questions/5874652/prop-vs-attrUsuwanie formularzy jest nieco trudne i nie tak proste, jak się wydaje.
Zaproponuj użycie wtyczki jQuery i skorzystaj z jej funkcji clearForm lub resetForm . Zajmuje się większością skrzynek narożnych.
źródło
document.getElementById ('frm'). reset ()
źródło
Zwyklę robię:
lub
źródło
Oto coś na początek
Oczywiście, jeśli masz pola wyboru / przyciski opcji, musisz to zmodyfikować, aby również je uwzględnić i ustawić
.attr({'checked': false});
edytuj Odpowiedź Paolo jest bardziej zwięzła. Moja odpowiedź jest trudniejsza, ponieważ nie wiedziałem o
:input
selektorze ani nie myślałem o zwykłym usunięciu zaznaczonego atrybutu.źródło
Zastanów się nad użyciem wtyczki walidacyjnej - to świetnie! A formularz resetowania jest prosty:
źródło
Uważam, że to działa dobrze.
źródło
w zasadzie żaden z dostarczonych rozwiązań mnie nie cieszy. jak wskazało kilka osób, opróżniają formularz zamiast go resetować.
istnieje jednak kilka właściwości javascript, które pomagają:
przechowują one wartość, jaką miało pole podczas wczytywania strony.
pisanie wtyczki jQuery jest teraz banalne: (dla niecierpliwych ... oto demo http://jsfiddle.net/kritzikratzi/N8fEF/1/ )
kod wtyczki
stosowanie
kilka notatek ...
$( "#container" ).resetValue()
nie będzie działać. zawsze używaj$( "#container :input" )
zamiast tego.źródło
Może się okazać, że jest to łatwiejsze do rozwiązania bez jQuery.
W zwykłym JavaScript jest to tak proste, jak:
Staram się zawsze pamiętać, że chociaż używamy jQuery do ulepszania i przyspieszania naszego kodowania, czasami tak naprawdę nie jest to szybsze. W takich przypadkach często lepiej jest użyć innej metody.
źródło
Dokonałem niewielkiej zmiany fajnego rozwiązania Francisa Lewisa . To, czego nie robi jego rozwiązanie, to ustawienie rozwijanych opcji na puste. (Myślę, że kiedy większość ludzi chce „wyczyścić”, prawdopodobnie chcą, aby wszystkie wartości były puste.) Ta robi to
.find('select').prop("selectedIndex", -1)
.źródło
Zwykle dodaję do formularza ukryty przycisk resetowania. w razie potrzeby po prostu: $ ('# reset'). click ();
źródło
Modyfikacja najczęściej głosowanej odpowiedzi na
$(document).ready()
sytuację:źródło
Po prostu użyj tego,
jQuery Trigger event
aby:Spowoduje to zresetowanie pól wyboru, przycisków radiowych, pól tekstowych itp. Zasadniczo zmienia on formularz w stan domyślny. Po prostu włóż
#ID, Class, element
wnętrzejQuery
selektora.źródło
to zadziałało dla mnie, odpowiedź pirrotex nie zresetowała wybranych pól, wzięła jego, tutaj 'moją edycję:
źródło
Korzystam z rozwiązania Paolo Bergantino, które jest świetne, ale z kilkoma poprawkami ... W szczególności do pracy z nazwą formularza zamiast id.
Na przykład:
Teraz, gdy chcę tego użyć, mogę zrobić
Jak widać, działa to w dowolnej formie, a ponieważ używam stylu css do utworzenia przycisku, strona nie odświeży się po kliknięciu. Jeszcze raz dziękuję Paolo za Twój wkład. Jedynym problemem jest to, czy mam wartości domyślne w formularzu.
źródło
Użyłem poniższego rozwiązania i zadziałało dla mnie (mieszanie tradycyjnego javascript z jQuery)
źródło
Jestem tylko pośrednikiem w PHP i jestem trochę leniwy, aby zanurzyć się w nowym języku, takim jak JQuery, ale czy poniższe postępowanie nie jest prostym i eleganckim rozwiązaniem?
Nie widzę powodu, dla którego nie masz dwóch przycisków przesyłania, tylko w różnych celach. Następnie po prostu:
Po prostu redefiniujesz swoje wartości z powrotem tak, jak powinny być domyślne.
źródło
Metodą, której użyłem w dość dużej formie (ponad 50 pól) było po prostu ponowne załadowanie formularza za pomocą AJAX, w zasadzie oddzwanianie do serwera i po prostu zwracanie pól z ich domyślnymi wartościami. Jest to o wiele łatwiejsze niż próba złapania każdego pola za pomocą JS, a następnie ustawienia go na wartość domyślną. Pozwoliło mi to również zachować wartości domyślne w jednym miejscu - w kodzie serwera. Na tej stronie były też różne ustawienia domyślne w zależności od ustawień konta i dlatego nie musiałem się martwić o przesłanie ich do JS. Jedynym małym problemem, z którym musiałem sobie poradzić, były pola sugerujące, które wymagały inicjalizacji po wywołaniu AJAX, ale nic wielkiego.
źródło
Wszystkie te odpowiedzi są dobre, ale absolutnie najłatwiej to zrobić za pomocą fałszywego resetu, tzn. Używasz linku i przycisku resetowania.
Wystarczy dodać CSS, aby ukryć swój prawdziwy przycisk resetowania.
A następnie do linku dodajesz w następujący sposób
Mam nadzieję że to pomoże! ZA.
źródło
źródło
Tutaj z odświeżeniem pól wyboru i zaznaczeniem:
źródło
Miałem ten sam problem i post Paolo pomógł mi, ale musiałem dostosować jedną rzecz. Mój formularz o id advancedindexsearch zawierał tylko pola wejściowe i pobierał wartości z sesji. Z jakiegoś powodu następujące działania nie działały dla mnie:
Jeśli po tym wprowadzę alert, zobaczyłem wartości, które zostały poprawnie usunięte, ale potem zostały ponownie wymienione. Nadal nie wiem jak i dlaczego, ale następujący wiersz zrobił dla mnie lewę:
źródło
Odpowiedź Paolo nie uwzględnia wyboru dat, dodaj to w:
źródło
Poprawiłem nieco pierwotną odpowiedź Paolo Bergantino
W ten sposób mogę przekazać dowolny element kontekstu do funkcji. Jestem w stanie zresetować cały formularz lub tylko pewien zestaw pól, na przykład:
Ponadto zachowane są domyślne wartości wejść.
źródło
oto moje rozwiązanie, które działa również z nowymi typami danych wejściowych HTML5:
źródło
break
poniżejcheckbox
iradio
. Nie ma takiej potrzeby w obecnej pozycji.Uzupełniając zaakceptowaną odpowiedź, jeśli używasz wtyczki SELECT2, musisz przywołać skrypt select2, aby wprowadzić zmiany, wszystkie pola select2:
źródło
źródło