Myślałem, że mogą, ale skoro nie wkładam pieniędzy tam, gdzie moje usta (że tak powiem) ustawiają atrybut „tylko do odczytu”, to tak naprawdę nic nie robi.
Wolałbym nie używać opcji Wyłączone, ponieważ chcę, aby zaznaczone pola wyboru były przesyłane wraz z resztą formularza, po prostu nie chcę, aby klient mógł je zmienić w określonych okolicznościach.
readonly
)readonly
! Dlaczego więc ten atrybut istniałby!readonly
jest tylko atrybutem po stronie klienta, który pomaga przeglądarce poprawnie renderować witrynę, a następnie konstruować z niej prawidłowe żądanie. Serwer nie może i nie powinien wiedzieć oreadonly
atrybucie renderowanej strony. Musi zakładać, że żądanie pochodzi z dowolnego miejsca (i prawdopodobnie ze złośliwymi intencjami); nigdy nie polegaj na danych dostarczonych przez użytkownika. Po co jednak wysyłać wartość pola wyboru, którego nie można edytować w żądaniu (jeśli ustawisz wartość przed renderowaniem, znasz już wartość w momencie przesłania żądania, więc nie ma potrzeby przesyłania jej w żądaniu)readonly
atrybut istnieje z jakiegoś powodu. Z pewnością nie ma to nic wspólnego z implementacją po stronie serwera. Ale jest po to, aby powiedzieć użytkownikowi „Hej! Ta wartość jest tutaj zakładana i / ale nie możesz jej zmienić”.Odpowiedzi:
możesz użyć tego:
Działa to, ponieważ zwracanie wartości false ze zdarzenia click powoduje zatrzymanie łańcucha wykonywania.
źródło
checked="checked"
, a nie zadzierać z javascript. Javascript jest po to, aby wymusić ignorowanie kliknięć myszą na obiekcie wejściowym, a nie ustawianie stanu pola wyboru.READONLY
nie działa na wyboru, gdyż uniemożliwia edycji pola za wartość , ale z wyboru masz faktycznie edycję pola w stan (na || off)Od faqs.org :
Jeśli nie chcesz używać,
disabled
ale nadal chcesz przesłać wartość, co powiesz na przesłanie wartości jako ukrytego pola i po prostu wydrukowanie jej zawartości, gdy użytkownik nie spełni kryteriów edycji? na przykładźródło
To pole wyboru nie można zmienić:
Po prostu dodaj
disabled="disabled"
jako atrybut.Edytuj, aby uwzględnić komentarze:
Jeśli chcesz, aby dane zostały przesłane z powrotem, prostym rozwiązaniem jest zastosowanie tej samej nazwy do ukrytego wejścia:
W ten sposób, gdy pole wyboru jest ustawione na „wyłączone”, służy jedynie do wizualnej reprezentacji danych, zamiast być „połączonym” z danymi. W odpowiedzi z powrotem wartość ukrytego wejścia jest wysyłana, gdy pole wyboru jest wyłączone.
źródło
Ale absolutnie MUSISZ zweryfikować dane na serwerze, aby upewnić się, że nie zostały zmienione.
źródło
inne „proste rozwiązanie”:
źródło
name
ivalue
atrybuty ze swojego fikcyjnego pudełka,="checked"
a także atrybuty="diabled"
-wartości mogą zostać porzucone. w3.org/TR/html-markup/input.checkbox.htmlJest to nieco problem z użytecznością.
Jeśli chcesz wyświetlić pole wyboru, ale nie pozwolić na interakcję, dlaczego nawet pole wyboru?
Jednak moim podejściem byłoby użycie opcji wyłączone (użytkownik spodziewa się, że wyłączone pole wyboru nie będzie edytowalne, zamiast używania JS do włączenia włączonej niedziałającej) i dodanie modułu obsługi przesyłania formularzy za pomocą javascript, który włącza pola wyboru tuż przed przesłaniem formularza przesłane. W ten sposób opublikujesz swoje wartości.
tj. coś takiego:
źródło
z jquery:
dobrym pomysłem może być podanie wizualnej wskazówki (css, tekst, ...), że kontrolka nie zaakceptuje danych wejściowych.
źródło
$(':checkbox[readonly]')
na zaznaczeniu wszystkich pól wyboru kandydata, ponieważreadonly
wartość atrybutu jest opcjonalna.Użyłem tego, aby osiągnąć wyniki:
źródło
Zauważyłem rozwiązanie podane poniżej. Znalazłem to moje badania dotyczące tego samego problemu. Nie wiem, kto to opublikował, ale nie został stworzony przeze mnie. Wykorzystuje jQuery:
To sprawiłoby, że pola wyboru byłyby tylko do odczytu, co byłoby pomocne w wyświetlaniu klientowi danych tylko do odczytu.
źródło
źródło
onclick="javascript: return true;"
po prostu sprawia, że działa jak normalne pole wyboru. Poradnik? Dzięki!checked
atrybut i utrzymujfalse
na miejscu.Spóźniona odpowiedź, ale większość odpowiedzi wydaje się zbyt skomplikowana.
Jak rozumiem, OP zasadniczo chciał:
Należy zauważyć że:
disabled
atrybutu, ponieważ „chce, aby zaznaczone pola wyboru były przesyłane wraz z resztą formularza”.yes
lubfalse
, ale może być dowolnym tekstem.Dlatego, ponieważ
readonly
atrybut nie działa, najlepszym rozwiązaniem, niewymagającym javascript, jest:Tak więc dla zaznaczonego pola wyboru:
W przypadku niezaznaczonego pola wyboru:
Głównym problemem związanym z wyłączonymi wejściami, zwłaszcza polami wyboru, jest ich słaby kontrast, co może być problemem dla niektórych osób z pewnymi zaburzeniami widzenia. Lepiej wskazać wartość zwykłymi słowami, takimi jak
Status: none
lubStatus: implemented
, ale włączając ukryte dane wejściowe powyżej, gdy używane są te ostatnie, takie jak:źródło
Większość obecnych odpowiedzi ma jeden lub więcej z następujących problemów:
Poniższe jest proste i nie ma żadnego z tych problemów.
Jeśli pole wyboru jest tylko do odczytu, nie zmieni się. Jeśli nie, to zrobi to. Używa jquery, ale prawdopodobnie już tego używasz ...
To działa.
źródło
źródło
Jeśli chcesz, aby były przesyłane do serwera za pomocą formularza, ale nie będą interakcyjne dla użytkownika, możesz użyć
pointer-events: none
w css ( działa we wszystkich nowoczesnych przeglądarkach oprócz IE10- i Opera 12- ) i ustawić indeks tabulatorów,-1
aby zapobiec zmianie za pomocą klawiatury. Pamiętaj też, że nie możesz użyćlabel
tagu, ponieważ kliknięcie go i tak zmieni stan.źródło
for
atrybutu. W takim przypadku możesz użyćinput[type="checkbox"][readonly] + label { pointer-events: none !important; }
.label
i dodałeśtabindex
? Jak ustawić fokus na nieusuwalnym elemencie, aby nacisnąć na niego spację?<input type="checkbox" onclick="return false" />
będzie działać dla ciebie, używam tegoźródło
Niektóre odpowiedzi tutaj wydają się nieco ronda, ale oto mały hack.
następnie w jquery możesz wybrać jedną z dwóch opcji:
W pobliżu
demo: http://jsfiddle.net/5WFYt/
źródło
Opierając się na powyższych odpowiedziach, jeśli używasz jQuery, może to być dobre rozwiązanie dla wszystkich danych wejściowych:
Używam tego z Asp.Net MVC, aby ustawić niektóre elementy formularza tylko do odczytu. Powyższe działa w przypadku pól tekstowych i pól wyboru, ustawiając dowolny kontener nadrzędny jako .readonly, na przykład następujące scenariusze:
źródło
źródło
Wiem, że „wyłączone” nie jest akceptowalną odpowiedzią, ponieważ operacja chce, żeby to opublikował. Jednak zawsze będziesz musiał zweryfikować wartości NAWET serwera, jeśli masz ustawioną opcję tylko do odczytu. Wynika to z faktu, że nie można powstrzymać złośliwego użytkownika przed publikowaniem wartości przy użyciu atrybutu tylko do odczytu.
Sugeruję zapisanie oryginalnej wartości (po stronie serwera) i ustawienie jej na wyłączone. Następnie, gdy prześlą formularz, zignoruj wszystkie opublikowane wartości i weź oryginalne zapisane wartości.
Będzie wyglądał i zachowywał się, jakby to była wartość tylko do odczytu. I obsługuje (ignoruje) posty od złośliwych użytkowników. Zabijasz 2 ptaki jednym kamieniem.
źródło
Skomentowałbym odpowiedź ConroyP, ale to wymaga 50 reputacji, których nie mam. Mam wystarczającą reputację, aby opublikować kolejną odpowiedź. Przepraszam.
Problem z odpowiedzią ConroyP polega na tym, że pole wyboru staje się niezmienne, nawet jeśli nie jest umieszczone na stronie. Chociaż Electrons_Ahoy nie określa tak wiele, najlepszą odpowiedzią byłaby odpowiedź, w której niezmienne pole wyboru wyglądałoby podobnie, jeśli nie to samo, co zmienne pole wyboru, jak w przypadku zastosowania atrybutu „wyłączony”. Rozwiązanie, które odnosi się do dwóch powodów Electrons_Ahoy daje za nie chcąc użyć „wyłączone” atrybut by nie muszą być nieprawidłowy, ponieważ wykorzystał „wyłączone” atrybut.
Załóżmy dwie zmienne logiczne, $ sprawdzone i $ wyłączone:
Pole wyboru jest wyświetlane jako zaznaczone, jeśli $ sprawdzone jest prawdziwe. Pole wyboru jest wyświetlane jako niezaznaczone, jeśli $ zaznaczone jest fałszem. Użytkownik może zmienić stan pola wyboru, jeśli i tylko jeśli $ disabled jest fałszywe. Parametr „moja_nazwa” nie jest wysyłany, gdy pole wyboru nie jest zaznaczone przez użytkownika, czy nie. Parametr „moja_nazwa = 1” jest wysyłany, gdy pole wyboru jest zaznaczone przez użytkownika, czy nie. Myślę, że tego właśnie szukał Electrons_Ahoy.
źródło
Nie, pola wyboru danych wejściowych nie można odczytać tylko.
Ale możesz zrobić je tylko do odczytu za pomocą javascript!
Dodaj ten kod w dowolnym miejscu i czasie, aby pola wyboru działały tylko zgodnie z założeniami, uniemożliwiając użytkownikowi modyfikowanie go w jakikolwiek sposób.
Możesz dodać ten skrypt w dowolnym momencie po załadowaniu jQuery.
Będzie działać dla dynamicznie dodawanych elementów.
Działa poprzez pobranie zdarzenia kliknięcia (które następuje przed zdarzeniem zmiany) w dowolnym elemencie na stronie, a następnie sprawdza, czy ten element jest polem wyboru tylko do odczytu, a jeśli tak, to blokuje zmianę.
Jest tak wiele ifs, aby nie wpływać na wydajność strony.
źródło
Wystarczy użyć prostego wyłączonego tagu, jak poniżej.
źródło
alternatywnym pomysłem jest użycie nakładki i zatuszowanie tylko do odczytu danych wejściowych
http://pure-essence.net/2011/09/22/jquery-read-only-elements/
źródło
Jeśli chcesz, aby WSZYSTKIE pola wyboru były „zablokowane”, aby użytkownik nie mógł zmienić stanu „zaznaczone”, jeśli obecny jest atrybut „tylko do odczytu”, możesz użyć jQuery:
Fajną rzeczą w tym kodzie jest to, że pozwala on zmieniać atrybut „tylko do odczytu” w całym kodzie bez konieczności ponownego wiązania każdego pola wyboru.
Działa również z przyciskami radiowymi.
źródło
Głównym powodem, dla którego ludzie chcieliby mieć pole wyboru tylko do odczytu i (a także) grupę radiową tylko do odczytu, jest to, że informacje, których nie można zmienić, mogą zostać przedstawione użytkownikowi w postaci, w jakiej zostały wprowadzone.
OK wyłączone to zrobi - niestety wyłączone elementy sterujące nie są obsługiwane za pomocą klawiatury i dlatego są niezgodne z wszelkimi przepisami dotyczącymi dostępności. To jest NAJWIĘKSZE zawieszenie w HTML, które znam.
źródło
Wkład bardzo późno ... ale w każdym razie. Podczas ładowania strony użyj jquery, aby wyłączyć wszystkie pola wyboru oprócz aktualnie wybranego. Następnie ustaw aktualnie wybrany jako tylko do odczytu, aby wyglądał podobnie do wyłączonych. Użytkownik nie może zmienić wartości, a wybrana wartość wciąż się przesyła.
źródło
Bardzo późno na imprezę, ale znalazłem odpowiedź dla MVC (5), wyłączyłem CheckBox i dodałem HiddenFor PRZED polem wyboru, więc kiedy pisze, jeśli najpierw znajdzie Ukryte pole i użyje tej wartości. To działa.
źródło
Użyłbym atrybutu tylko do odczytu
Następnie użyj CSS, aby wyłączyć interakcje:
Zauważ, że użycie pseudoklasy: tylko do odczytu nie działa tutaj.
źródło
GOTOWOŚĆ sama w sobie nie będzie działać. Możesz być w stanie zrobić coś funky w / CSS, ale zwykle po prostu wyłączamy je.
OSTRZEŻENIE: Jeśli zostaną wysłane, klient może je zmienić, kropka. Nie możesz polegać na readonly, aby uniemożliwić użytkownikowi zmianę treści. Zawsze można użyć skrzypka lub po prostu zmienić html w / firebug lub coś takiego.
źródło
Moje rozwiązanie jest w rzeczywistości przeciwieństwem rozwiązania FlySwat, ale nie jestem pewien, czy zadziała w twojej sytuacji. Mam grupę pól wyboru, a każde z nich ma moduł obsługi onClick, który przesyła formularz (służą do zmiany ustawień filtrów dla tabeli). Nie chcę zezwalać na wiele kliknięć, ponieważ kolejne kliknięcia po pierwszym są ignorowane. Dlatego wyłączam wszystkie pola wyboru po pierwszym kliknięciu i po przesłaniu formularza:
onclick="document.forms['form1'].submit(); $('#filters input').each(function() {this.disabled = true});"
Pola wyboru znajdują się w elemencie span o identyfikatorze „filtrów” - druga część kodu to instrukcja jQuery, która iteruje przez pola wyboru i wyłącza każde z nich. W ten sposób wartości pól wyboru są nadal przesyłane za pośrednictwem formularza (ponieważ formularz został przesłany przed ich wyłączeniem), co uniemożliwia użytkownikowi ich zmianę do czasu ponownego załadowania strony.
źródło