Mam formularz z wieloma polami do wprowadzania danych.
Czy podczas przechwytywania zdarzenia przesłania formularza za pomocą jQuery można uzyskać wszystkie pola wejściowe tego formularza w tablicy asocjacyjnej?
javascript
jquery
Wasil
źródło
źródło
Odpowiedzi:
Dzięki wskazówce od Simon_Weaver, oto inny sposób, w jaki możesz to zrobić, używając
serializeArray
:Pamiętaj, że ten fragment kodu nie powiedzie się na
<select multiple>
elementach.Wygląda na to, że nowe dane wejściowe formularza HTML 5 nie działają
serializeArray
w jQuery w wersji 1.3. Działa to w wersji 1.4+źródło
name
ivalue
. Lepszym rozwiązaniem może być przetworzenie danych wyjściowych z serializeArray na dowolny wymagany format.<select>
elementami? Próbowałem,var $inputs = $('#new-ticket :input, :select');
ale to nie działa. Czy ktoś wie, jak to zrobić, ponieważ nie sądzę, że robię to dobrze.$("#new-ticket :input, #new-ticket :select")
, a nawet lepiej,$(":input, :select", "#new-ticket")
Późno na imprezę w tej kwestii, ale jest to jeszcze łatwiejsze:
źródło
.serialize()
( api.jquery.com/serialize ) umieszcza wszystkie elementy formularza w jednym ciągu gotowym do dołączenia do adresu URL w ciągu zapytania, zasadniczo naśladując żądanie formularza GET. Nie osiągnęłoby to tego, co osiągnęła odpowiedź nickf..serialize()
działa również na elementy po prostu formy. Tak$('form select').serialize()
serializuje dane tylko dla wybranych.$('#myForm')
, użyj $ (this).jquery.form Wtyczka może pomóc z tym, co inni szukają tego skończyć na to pytanie. Nie jestem pewien, czy robi to bezpośrednio, co chcesz, czy nie.
Istnieje również funkcja serializeArray .
źródło
Czasami okazuje się, że otrzymywanie jednego na raz jest bardziej przydatne. W tym celu jest to:
źródło
[0].value
do tego tj.$(...)[0].value;
Bezpośrednio podałem wartość wejściową, dzięki!Zmienna elements będzie zawierać wszystkie dane wejściowe, zaznaczenia, pola tekstowe i zestawy pól w formularzu.
źródło
Oto inne rozwiązanie, w ten sposób możesz pobrać wszystkie dane o formularzu i użyć go do połączenia z serwerem lub czegoś takiego.
Następnie możesz użyć tego z wywołaniami ajax:
Mam nadzieję, że jest to przydatne dla każdego z was :)
źródło
Miałem podobny problem z lekkim zwrotem akcji i myślałem, że to wyrzucę. Mam funkcję wywołania zwrotnego, która pobiera formularz, więc miałem już obiekt formularza i nie mogłem łatwo wprowadzić jego wariantów
$('form:input')
. Zamiast tego wymyśliłem:Podobna, ale nie identyczna sytuacja, ale ten wątek okazał się bardzo przydatny i pomyślałem, że schowam go na końcu i mam nadzieję, że ktoś inny uzna to za przydatne.
źródło
Asocjacyjny? Nie bez pracy, ale możesz użyć ogólnych selektorów:
źródło
jQuery
serializeArray
nie zawiera wyłączonych pól, więc jeśli ich potrzebujesz, spróbuj:źródło
http://api.jquery.com/serializearray/
Można to również zrobić bez jQuery przy użyciu obiektu FormData XMLHttpRequest poziomu 2
http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface
źródło
Nie zapomnij pól wyboru i przycisków opcji -
źródło
Ten fragment kodu będzie działał zamiast nazwy, e-mail wprowadź nazwę pola formularza
źródło
Wydaje się dziwne, że nikt nie ocenił ani nie zaproponował zwięzłego rozwiązania w zakresie uzyskiwania danych z listy. Prawie żadne formy nie będą obiektami jednowymiarowymi.
Wadą tego rozwiązania jest oczywiście to, że do obiektów singletonowych trzeba będzie uzyskać dostęp w indeksie [0]. Ale IMO jest o wiele lepsze niż stosowanie jednego z kilkudziesięciu linii rozwiązań mapowania.
źródło
Miałem ten sam problem i rozwiązałem go w inny sposób.
Zwraca wartość wszystkich pól wejściowych. Możesz zmienić na
$(':input')
bardziej szczegółowy.źródło
To samo rozwiązanie, co podane przez nickf , ale z uwzględnieniem nazw wejściowych tablic, np
<input type="text" name="array[]" />
źródło
Jeśli potrzebujesz uzyskać wiele wartości z danych wejściowych i używasz [] do zdefiniowania danych wejściowych z wieloma wartościami, możesz użyć następujących opcji:
źródło
Inspirowane odpowiedziami Lance'a Rushinga i Simona_Weavera , to moje ulubione rozwiązanie.
Dane wyjściowe to tablica obiektów, np
Z poniższym kodem
jego końcowy wynik byłby
źródło
Używam tego kodu bez każdej pętli:
źródło
Mam nadzieję, że jest to pomocne i najłatwiejsze.
źródło
Kiedy potrzebowałem wykonać wywołanie ajax ze wszystkimi polami formularza, miałem problemy z selektorem : input zwracającym wszystkie pola wyboru, niezależnie od tego, czy były zaznaczone. Dodałem nowy selektor, aby uzyskać tylko możliwe elementy formularza:
stosowanie:
Nie przetestowałem go jeszcze z wieloma polami wyboru, ale działa to tak, aby uzyskać wszystkie pola formularza w sposób zgodny ze standardowym przesyłaniem.
Użyłem tego przy dostosowywaniu opcji produktu w witrynie OpenCart w celu uwzględnienia pól wyboru i pól tekstowych, a także standardowego typu pola wyboru.
źródło
serialize () to najlepsza metoda. @ Christopher Parker powiedział, że anwser Nickfa osiąga więcej, jednak nie bierze pod uwagę, że formularz może zawierać obszar tekstowy i wybrane menu. O wiele lepiej jest użyć serialize (), a następnie manipulować nim tak, jak trzeba. Dane z serialize () można wykorzystać w poście Ajax lub w get, więc nie ma problemu.
źródło
Mam nadzieję, że to komuś pomoże. :)
źródło
Wszystkie odpowiedzi są dobre, ale czy istnieje pole, które chcesz zignorować w tej funkcji? Łatwo, nadaj temu polu właściwość, na przykład ignore_this:
I w twojej funkcji serializacji:
W ten sposób ignorujesz niektóre pola.
źródło
$('.mandatory');
i!$('.mandatory');
ignore_this
nadata-ignore-this="true"
zamiast tworzyć własne atrybuty, które nie sprawdzają poprawności w3cWypróbuj następujący kod:
źródło
W przypadku wielu wybranych elementów (
<select multiple="multiple">
) zmodyfikowałem rozwiązanie z @Jason Norwood-Young, aby działało.Odpowiedź (jak opublikowano) bierze wartość tylko z pierwszego wybranego elementu, a nie wszystkich . Nie zainicjował się ani nie zwrócił
data
, ten pierwszy generuje błąd JavaScript.Oto nowa wersja:
Stosowanie:
Uwaga: Musisz tylko upewnić się, że wybrany
name
przez Ciebie dodatek został[]
dołączony na końcu, na przykład:źródło
źródło