Mam select
pole formularza, które chcę oznaczyć jako „tylko do odczytu”, ponieważ użytkownik nie może modyfikować wartości, ale wartość jest nadal przesyłana wraz z formularzem. Użycie tego disabled
atrybutu uniemożliwia użytkownikowi zmianę wartości, ale nie przesyła wartości wraz z formularzem.
readonly
Atrybut jest dostępny tylko dla input
i textarea
pól, ale to w zasadzie to, co chcę. Czy jest jakiś sposób, żeby to zadziałało?
Rozważam dwie możliwości:
- Zamiast
select
wyłączać, wyłącz wszystkieoption
i użyj CSS, aby wyszarzyć zaznaczenie, aby wyglądało na wyłączone. - Dodaj moduł obsługi zdarzeń kliknięcia do przycisku przesyłania, aby umożliwić włączenie wszystkich wyłączonych menu rozwijanych przed przesłaniem formularza.
javascript
html
css
forms
html-select
Markiz Wang
źródło
źródło
trafalmadorian
workest są najlepsze. Wyłącza wszystkie wejścia, które nie są wybrane. Działałoby to również, jeśli zaznaczono, że włączono wiele opcji.$('#toSelect')find(':not(:selected)').prop('disabled',true);
Odpowiedzi:
Gdzie
select_name
jest nazwa, którą normalnie byś nadał<select>
.Inna opcja.
Teraz z tym jednym zauważyłem, że w zależności od używanego serwera WWW może być konieczne wprowadzenie
hidden
danych wejściowych przed lub po<select>
.Jeśli moja pamięć służy mi poprawnie, w IIS umieścisz ją wcześniej, w Apache umieścisz ją później. Jak zawsze testowanie jest kluczowe.
źródło
Wyłącz pola, a następnie włącz je przed przesłaniem formularza:
Kod jQuery:
źródło
Szukałem rozwiązania tego problemu, a ponieważ nie znalazłem rozwiązania w tym wątku, zrobiłem to sam.
Proste, po prostu zamazujesz pole, gdy się na nim skupisz, coś w rodzaju wyłączenia, ale w rzeczywistości wysyłasz jego dane.
źródło
Miałem do czynienia z nieco innym scenariuszem, w którym chciałem tylko nie pozwolić użytkownikowi na zmianę wybranej wartości na podstawie wcześniejszego pola wyboru. Skończyło się to na wyłączeniu wszystkich innych niewybranych opcji w selectbox przy użyciu
źródło
attr
powinien się zmienićprop
, wyglądałby$('#toSelect')find(':not(:selected)').prop('disabled',true);
To samo rozwiązanie zaproponowane przez Tres bez użycia jQuery
Może to pomóc komuś lepiej zrozumieć, ale oczywiście jest mniej elastyczny niż jQuery.
źródło
getElementsByTagName('select')
?nie działa z selektorem: input dla wybranych pól, użyj tego:
źródło
Używam następnego kodu do wyłączania opcji w selekcjach
źródło
Najprostszym sposobem, jaki znalazłem, było stworzenie małej funkcji javascript powiązanej z twoją formą:
i nazywacie to tutaj w formularzu:
Lub możesz to wywołać w funkcji, której używasz do sprawdzania formularza :)
źródło
Po prostu dodaj wiersz przed przesłaniem.
źródło
Lub użyj JavaScript, aby zmienić nazwę zaznaczenia i ustawić go na wyłączony. W ten sposób zaznaczenie jest nadal przesyłane, ale przy użyciu nazwy, której nie sprawdzasz.
źródło
Podniosłem szybką wtyczkę (tylko Jquery), która zapisuje wartość w polu danych, gdy wejście jest wyłączone. Oznacza to tylko, że dopóki pole jest wyłączane programowo poprzez jquery za pomocą .prop () lub .attr () ... to dostęp do wartości przez .val (), .serialize () lub .serializeArra () zawsze zwróci właściwość wartość, nawet jeśli wyłączona :)
Bezwstydna wtyczka: https://github.com/Jezternz/jq-disabled-inputs
źródło
W oparciu o rozwiązanie Jordana stworzyłem funkcję, która automatycznie tworzy ukryte dane wejściowe o tej samej nazwie i tej samej wartości zaznaczenia, które chcesz unieważnić. Pierwszym parametrem może być id lub element jquery; drugi to logiczny parametr opcjonalny, w którym „prawda” wyłącza, a „fałsz” włącza dane wejściowe. Jeśli zostanie pominięty, drugi parametr przełącza wybór pomiędzy „włączony” i „wyłączony”.
źródło
Znalazłem wykonalne rozwiązanie: usuń wszystkie elementy oprócz wybranego. Następnie możesz zmienić styl na coś, co również wygląda na wyłączone. Korzystanie z jQuery:
źródło
źródło
Inną opcją jest użycie atrybutu tylko do odczytu.
W przypadku odczytu tylko wartość jest nadal przesyłana, pole wprowadzania jest wyszarzone i użytkownik nie może go edytować.
Edytować:
Cytat z http://www.w3.org/TR/html401/interact/forms.html#adef-readonly :
Kiedy mówi, że element może się powieść, oznacza to, że można go przesłać, jak stwierdzono tutaj: http://www.w3.org/TR/html401/interact/forms.html#successful-controls
źródło