Czy można wyłączyć pola formularzy za pomocą CSS? Oczywiście wiem o wyłączonym atrybucie, ale czy można to określić w regule CSS? Coś jak -
<input type="text" name="username" value="admin" >
<style type="text/css">
input[name=username] {
disabled: true; /* Does not work */
}
</style>
Pytam o to, że mam aplikację, w której pola formularzy są generowane automatycznie, a pola są ukrywane / pokazywane na podstawie pewnych reguł (które działają w Javascript). Teraz chcę go rozszerzyć, aby obsługiwał wyłączanie / włączanie pól, ale sposób, w jaki reguły są napisane, aby bezpośrednio manipulować właściwościami stylu pól formularza. Więc teraz muszę rozszerzyć silnik reguł, aby zmienić atrybuty, a także styl pól formularzy i jakoś wydaje się to mniej niż idealne.
To bardzo ciekawe, że masz widoczne i wyświetlane właściwości w CSS, ale nie włączasz / wyłączasz. Czy jest coś podobnego w wciąż niepracującym standardzie HTML5, czy nawet coś niestandardowego (specyficznego dla przeglądarki)?
Odpowiedzi:
Może to być pomocne:
Aktualizacja:
a jeśli chcesz wyłączyć z indeksu zakładek, możesz go użyć w ten sposób:
źródło
Możesz sfałszować efekt wyłączenia za pomocą CSS.
Możesz także chcieć zmienić kolory itp.
źródło
Ponieważ reguły działają w JavaScript, dlaczego nie wyłączyć ich za pomocą javascript (lub w moim przypadku jQuery)?
AKTUALIZACJA
attr
Funkcja nie jest już podstawowym podejście do tego, co zostało podkreślone w komentarzach poniżej. Odbywa się to teraz za pomocąprop
funkcji.źródło
.prop()
zamiast tego.attr()
w tym przypadku. „Od jQuery 1.6 metoda .attr () zwraca wartość undefined dla atrybutów, które nie zostały ustawione. Aby pobrać i zmienić właściwości DOM, takie jak sprawdzony, zaznaczony lub wyłączony stan elementów formularza, użyj metody .prop (). " Dokumentacja źródłowa: .attr () i .prop ()To bardzo ciekawe, że myślisz, że to bardzo ciekawe. Nie rozumiesz celu CSS. CSS nie ma na celu zmiany zachowania elementów formularza. Ma zmienić tylko ich styl . Ukrycie pola tekstowego nie oznacza, że to pole już tam nie istnieje lub że przeglądarka nie wyśle swoich danych po przesłaniu formularza. Wszystko, co robi, to ukrywanie go przed oczami użytkownika.
Aby faktycznie wyłączyć pola, musisz użyć
disabled
atrybutu w HTML lubdisabled
właściwości DOM w JavaScript.źródło
pointer-events
bycie własnością CSS. FYI,pointer-events
pochodzi z SVG .Nie możesz użyć CSS do wyłączenia Textbox. rozwiązaniem byłby atrybut HTML.
źródło
disabled
atrybutem nie są przesyłane - ich wartości nie są wysyłane na serwer. Czytaj dalej: stackoverflow.com/q/8925716/1066234Praktycznym rozwiązaniem jest użycie CSS do faktycznego ukrycia danych wejściowych.
Aby dojść do naturalnego wniosku, możesz napisać dwa wejścia HTML dla każdego rzeczywistego wejścia (jedno włączone i jedno wyłączone), a następnie użyć javascript do sterowania CSS, aby je pokazać i ukryć.
źródło
odpowiadanie za pierwszym razem i pozornie trochę spóźnione ...
Wyrażam zgodę na zrobienie tego przez javascript, jeśli już go używasz.
W przypadku struktury kompozytowej, jakiej zwykle używam, utworzyłem pseudo po elemencie css, aby zablokować elementy przed interakcją użytkownika i umożliwić stylizację bez konieczności manipulowania całą strukturą.
Na przykład:
Mogę umieścić
disabled
zajęcia na opakowaniudiv
Spowoduje to wyszarzenie tekstu w
div
elemencie i uczyni go bezużytecznym dla użytkownika.Mój przykład JSFiddle
źródło
Zawsze używam:
a następnie zastosuj klasę css do pola wejściowego:
źródło
Wiem, że to pytanie jest dość stare, ale dla innych użytkowników, którzy napotykają ten problem, przypuszczam, że najłatwiejszym sposobem na wyłączenie wprowadzania jest po prostu „: wyłączone”
W rzeczywistości, jeśli masz jakiś skrypt, który wyłącza dane wejściowe dynamicznie / automatycznie za pomocą javascript lub jquery, które wyłączyłyby się automatycznie na podstawie dodanego warunku.
Na przykład w jQuery:
Mam nadzieję, że odpowiedź w CSS pomoże.
źródło
Obawiam się, że nie możesz tego zrobić, ale możesz wykonać następujące czynności w jQuery, jeśli nie chcesz dodawać atrybutów do pól. Po prostu umieść to w swoim
<head></head>
taguJeśli generujesz pola w DOM (z JS), powinieneś zamiast tego zrobić:
źródło
Można to zrobić w niekrytycznym celu, nakładając nakładkę na element wejściowy. Oto mój przykład w czystym HTML i CSS.
https://jsfiddle.net/1tL40L99/
źródło
Nie ma możliwości wykorzystania CSS do tego celu. Radzę dołączyć kod javascript, w którym można przypisać lub zmienić klasę css zastosowaną do danych wejściowych. Coś w tym stylu :
źródło
Odmianą
pointer-events: none;
rozwiązania, które rozwiązuje problem z wejściem nadal dostępnym za pomocą kontrolki oznaczonej etykietą lub tabindeksu, jest zawijanie danych wejściowych w element div, który jest stylizowany na wyłączone wprowadzanie tekstu, i ustawienie,input { visibility: hidden; }
kiedy wejście jest „wyłączone” .Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/visibility#Values
Wyłączony styl zastosowany w powyższym fragmencie pochodzi z interfejsu użytkownika Chrome i może nie być wizualnie identyczny z wyłączonymi danymi wejściowymi w innych przeglądarkach. Możliwe, że można go dostosować do poszczególnych przeglądarek za pomocą specyficznych dla silnika przedrostków rozszerzeń CSS. Choć na pierwszy rzut oka, nie sądzę, że mógł:
Microsoft rozszerzeń CSS , Mozilla rozszerzeń CSS , rozszerzenia CSS WebKit
O wiele bardziej rozsądne wydaje się wprowadzenie dodatkowej wartości,
visibility: disabled
adisplay: disabled
może nawetappearance: disabled
, biorąc pod uwagę, żevisibility: hidden
wpływa to już na zachowanie odpowiednich elementów, wszelkich powiązanych elementów sterujących.źródło