Zastanawiasz się, czy w javascript jest funkcja bez jquery lub jakiegokolwiek środowiska, która pozwala mi serializować formularz i uzyskać dostęp do wersji zserializowanej?
javascript
forms
serialization
RussellHarrower
źródło
źródło
Odpowiedzi:
Biblioteka miniatur z serializacji nie opiera się na frameworku. Poza czymś takim musisz samodzielnie zaimplementować funkcję serializacji. (choć przy wadze 1,2 kilobajta, dlaczego go nie użyć?)
źródło
case 'email':
w sekcji wprowadzania koduThat's an error
Oto podejście oparte na czystym JavaScript:
Chociaż wydaje się, że działa tylko w przypadku żądań POST.
https://developer.mozilla.org/en-US/docs/Web/API/FormData
źródło
req.open("POST", "<your-url>");
wcześniej.req.send(data);
W przeciwnym razie wystąpił błądInvalidStateError: XMLHttpRequest state must be OPENED.
w przeglądarce Firefox 66. Powinien działać z innymi żądaniami, także takimi jak PUT, jeśli zastąpisz POST PUT.Tylko dla nowoczesnych przeglądarek
Jeśli kierujesz reklamy na przeglądarki obsługujące
URLSearchParams
interfejs API ( najnowsze przeglądarki ) iFormData(formElement)
konstruktor ( najnowsze przeglądarki z wyjątkiem Edge ), użyj tego:Wszędzie oprócz IE
W przypadku przeglądarek, które obsługują,
URLSearchParams
ale nie obsługująFormData(formElement)
konstruktora, użyj tego wypełnienia FormData i tego kodu (działa wszędzie z wyjątkiem IE):Przykład
Pokaż fragment kodu
Kompatybilny z IE 10
W przypadku nawet starszych przeglądarek (np. IE 10) użyj wypełnienia FormData , w
Array.from
razie potrzeby polyfill i tego kodu:źródło
.toString()
naprawdę jest tu potrzebne?URLSearchParams
, to tak. Konwersja ciągów zachodzi również niejawnie, jeśli interpolujesz lub dodajesz go do ciągu, w którym to przypadku jawnetoString
wywołanie nie jest konieczne.new FormData(formElement)
nie jest tam jeszcze obsługiwany?Źródło: http://code.google.com/p/form-serialize/source/browse/trunk/serialize-0.1.js
źródło
Oto nieco zmodyfikowana wersja TibTibsa:
Wyłączone pola są odrzucane, a nazwy są również kodowane jako adresy URL. Zastąpienie wyrażenia regularnego% 20 znaków odbywa się tylko raz, przed zwróceniem ciągu.
Ciąg zapytania ma taką samą postać jak wynik z metody $ .serialize () jQuery.
źródło
form.nodeName.toLowerCase() == "form"
zamiast tego można dodaćform.nodeName == "FORM"
Zacząłem od odpowiedzi Johndave Decano.
Powinno to rozwiązać kilka problemów wymienionych w odpowiedziach na jego funkcję.
Typy przycisków będą nadal ignorowane, jeśli nie mają wartości nazwy.
W ten sposób obecnie używam tej funkcji.
źródło
Jeśli chcesz przesłać formularz „myForm” za pomocą POST w formacie json, możesz to zrobić:
Druga linia konwertuje z tablicy takiej jak:
... w zwykły obiekt, taki jak:
... dokonuje tej konwersji, przekazując mapFn do Array.from (). To mapFn jest stosowane do każdej pary ["a", "b"] i konwertuje je na {"a": "b"}, tak że tablica zawiera wiele obiektów z tylko jedną właściwością w każdej. MapFn używa „destrukturyzacji”, aby uzyskać nazwy pierwszej i drugiej części pary, a także używa ES6 „ComputedPropertyName”, aby ustawić nazwę właściwości w obiekcie zwróconym przez mapFn (dlatego jest napisane „[ x]: coś ", a nie tylko" x: coś ".
Wszystkie te pojedyncze obiekty właściwości są następnie przekazywane do argumentów funkcji Object. assign (), która łączy wszystkie pojedyncze obiekty właściwości w jeden obiekt, który ma wszystkie właściwości.
Array.from (): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
Destrukturyzacja w parametrach: https://simonsmith.io/destruifying-objects-as-function-parameters-in-es6/
Więcej o obliczonych nazwach właściwości tutaj: Zmienna jako nazwa właściwości w literale obiektu JavaScript?
źródło
Działa we wszystkich przeglądarkach.
źródło
Aby użyć w ten sposób:
Mam nadzieję, że pomogłem.
źródło
Jeśli chcesz serializować dane wejściowe w zdarzeniu. Oto czysta metoda JavaScript, której używam.
Dane będą obiektem JavaScript danych wejściowych.
źródło
Refaktoryzowana wersja kodu @ SimonSteinbergera wykorzystująca mniej zmiennych i wykorzystująca prędkość
forEach
pętli (które są nieco szybsze niżfor
s)źródło
Przefaktorowałem odpowiedź TibTibsa na coś, co jest o wiele jaśniejsze do odczytania. Jest nieco dłuższy ze względu na szerokość 80 znaków i kilka komentarzy.
Ponadto ignoruje puste nazwy pól i puste wartości.
źródło
evt = evt || window.event || { target: null };
(tak jak to zrobiła edycja) Chodzi o to, aby przekazać zdarzenie, które wyzwoliło serializację, jeśli istnieje, takie jak formularz zdarzenie „wyślij” lub „kliknięcie” przycisku. Jeśli formularz ma wiele przycisków do przesłania, chcesz uwzględnić tylko wartość przycisku, który wywołał zdarzenie, a zignorować pozostałe. Zhakowałemźródło
Wziąłem metodę entry () formData z @moison answer iz MDN jest powiedziane, że:
ale jedynym problemem jest to, że przeglądarka mobilna (Android i Safari nie są obsługiwane), a także IE i Safari na komputery stacjonarne
ale w zasadzie oto moje podejście:
kod można znaleźć tutaj
źródło
Użycie funkcji redukcji JavaScript powinno załatwić sprawę dla wszystkich przeglądarek, w tym IE9>:
Przykład na żywo poniżej.
Pokaż fragment kodu
źródło
Mam nadzieję, że to zadziała
źródło
Poprawa odpowiedzi Davida Lemona.
To konwertuje dane formularza do formatu JSON i umożliwia ustawienie formularza z obiektu danych.
źródło
Można to zrobić za pomocą bardzo prostej funkcji w następujący sposób
źródło
Oto podejście oparte na czystym JavaScript:
źródło
źródło
W celach debugowania może ci to pomóc:
źródło
Mógłbym być szalony, ale te odpowiedzi są dla mnie poważnie nadęte. Oto moje rozwiązanie
źródło
select
- i tak dalej