Piszę trochę javascript (greasemonkey / userscript), który wstawi niektóre pola do formularza na stronie internetowej.
Rzecz w tym, że nie chcę, aby te pola wejściowe w jakikolwiek sposób wpływały na formularz, nie chcę, aby były przesyłane podczas przesyłania formularza, chcę, aby mój javascript miał tylko dostęp do ich wartości.
Czy jest jakiś sposób, żebym mógł dodać niektóre pola wejściowe w środku formularza i nie mieć ich przesłanych podczas przesyłania formularza?
Oczywiście idealnym rozwiązaniem byłoby, gdyby pola wejściowe nie znajdowały się w elemencie formularza, ale chcę, aby układ mojej strony wynikowej zawierał wstawione pola wejściowe między elementami pierwotnego formularza.
javascript
html
forms
userscripts
Żołądź
źródło
źródło
Odpowiedzi:
Możesz wstawić pola wejściowe bez atrybutu „nazwa”:
Lub możesz je po prostu usunąć po przesłaniu formularza (w
jQuery
):źródło
Najłatwiej byłoby wstawić elementy z
disabled
atrybutem.W ten sposób nadal możesz uzyskać do nich dostęp jako elementy podrzędne formularza.
Wyłączone pola mają tę wadę, że użytkownik nie może w ogóle wchodzić z nimi w interakcję - więc jeśli masz
disabled
pole tekstowe, użytkownik nie może zaznaczyć tekstu. Jeśli maszdisabled
pole wyboru, użytkownik nie może zmienić jego stanu.Możesz również napisać skrypt javascript, który będzie uruchamiany podczas przesyłania formularza, aby usunąć pola, których nie chcesz przesyłać.
źródło
name
majątku, którego możesz chcieć zatrzymać, jeśli chcesz, aby był używany później.name
atrybutu.Prosta próba usunięcia atrybutu nazwy z elementu wejściowego.
Więc to musi wyglądać
źródło
Chciałem tylko dodać dodatkową opcję: W swoim wejściu dodaj tag formularza i podaj nazwę formularza, który nie istnieje na twojej stronie:
źródło
fakeForm
gdzie indziej (nie ma potrzeby przesyłania), skutkuje to nieprawidłowym HTML.Możesz napisać procedurę obsługi zdarzeń,
onsubmit
która usuwaname
atrybut ze wszystkich pól wejściowych, których nie chcesz uwzględniać w przesyłanym formularzu.Oto szybki, nieprzetestowany przykład:
źródło
Wiem, że ten post jest stary, ale i tak odpowiem. Najłatwiejszym / najlepszym sposobem, jaki znalazłem, jest po prostu ustawienie pustej nazwy.
Umieść to przed przesłaniem:
Podsumowując, Twoja funkcja przesyłania może wyglądać następująco:
Spowoduje to przesłanie formularza ze wszystkimi innymi polami, ale nie spowoduje przesłania formularza bez nazwy.
źródło
Dodaj disabled = "disabled" na wejściu i podczas gdy jquery usuń atrybut wyłączony, jeśli chcesz go przesłać za pomocą .removeAttr ('disabled')
HTML:
<input type="hidden" name="test" value="test" disabled='disabled'/>
jQuery:
$("input[name='test']").removeAttr('disabled');
źródło
Wszystkie powyższe odpowiedzi mówiły już wszystko o (nie) nazywaniu formantów formularza lub programowym usuwaniu ich przed faktycznym wysłaniem formularza.
Chociaż w trakcie moich badań znalazłem jedno inne rozwiązanie, którego nie widziałem, wspomniane w tym poście:
Jeśli hermetyzujesz kontrolki formularza, które chcesz, aby były nieprzetworzone / nie wysyłane, wewnątrz innego
<form>
tagu bezmethod
atrybutu anipath
(i oczywiście bez kontroli typu przesyłania jak przycisk lub zagnieżdżone w nim dane wejściowe), a przesłanie formularza nadrzędnego nie będzie obejmować tych hermetyzowanych formantów formularza.Wartość kontrolna [name = "notSent"] nie będzie przetwarzana ani wysyłana do punktu końcowego POST serwera, ale ta z [name = "sent"] będzie.
To rozwiązanie może być anegdotyczne, ale nadal zostawiam je potomności ...
źródło
Obsługuj przesyłanie formularza w funkcji za pomocą onSubmit () i wykonaj coś takiego jak poniżej, aby usunąć element formularza: Użyj
getElementById()
DOM, a następnie użyj[object].parentNode.removeChild([object])
załóżmy, że Twoje pole ma kod identyfikatora „my_removable_field”:
Dzięki temu uzyskasz dokładnie to, czego szukasz.
źródło
Czy w ogóle potrzebujesz ich jako elementów wejściowych? Możesz użyć Javascript do dynamicznego tworzenia elementów div, akapitów, elementów listy lub czegokolwiek, co zawiera informacje, które chcesz przedstawić.
Ale jeśli element interaktywny jest ważny i trudno jest umieścić te elementy poza
<form>
blokiem, powinno być możliwe usunięcie tych elementów z formularza po przesłaniu strony.źródło
źródło
Musisz dodać onsubmit w swoim formularzu:
A skrypt będzie wyglądał następująco:
To działa na mnie za każdym razem :)
źródło