2010-03-16 37 views
44

Come disabilitare una casella di testo in CSS? Attualmente nella nostra vista abbiamo una casella di testo che può essere abilitata/disabilitata in base a una proprietà nel modello. Stiamo visualizzando la vista MVC di asp.net; in base al valore della proprietà Model è necessario eseguire il rendering di una casella di testo o di una casella di testo di sola lettura. stavamo pensando di farlo applicando CSS al controllo della vista. Qualcuno l'ha già fatto prima?Disabilitare una casella di testo utilizzando i CSS

+5

Si noti che c'è una sottile differenza tra 'readonly' e' disabled'. In entrambi i casi il valore non è modificabile, ma il primo invierà comunque il valore sul lato server, mentre il successivo non lo farà. Anche la versione successiva ha nella maggior parte dei browser web uno stile predefinito diverso (più scuro/ombreggiato). – BalusC

risposta

48

Il CSS non può disabilitare la casella di testo, tuttavia è possibile disattivare la visualizzazione o la visibilità.

display: none; 
visibility: hidden; 

Oppure si può anche impostare la HTMLattribute:

disabled="disabled" 
49

Non è possibile disabilitare nulla con i CSS, è un problema di funzionalità. I CSS sono pensati per problemi di progettazione. Puoi dare l'impressione che una casella di testo sia disabilitata, impostando su di essa i colori sbiaditi.

Per realtà disabilitare l'elemento, è necessario utilizzare i disabili attributo booleano:

<input type="text" name="lname" disabled /> 

Demo: http://jsfiddle.net/p6rja/

O, se si desidera, è possibile impostare questo tramite JavaScript:

document.forms['formName']['inputName'].disabled = true;​​​​ 

Demo: http://jsfiddle.net/655Su/

Ricordare che gli input disabilitati non passeranno i loro valori quando si inviano i dati sul server. Se desideri conservare i dati, ma non consentire di modificarli direttamente, potresti essere interessato a impostarlo su readonly.

// Similar to <input value="Read-only" readonly> 
document.forms['formName']['inputName'].readOnly = true; 

Demo: http://jsfiddle.net/655Su/1/

questo non cambia l'interfaccia utente dell'elemento, quindi si avrebbe bisogno di farlo da soli:

input[readonly] { 
    background: #CCC; 
    color: #333; 
    border: 1px solid #666 
} 

Si potrebbe anche bersagliare qualsiasi elemento disabilitato:

input[disabled] { /* styles */ } 
6

Non è possibile disabilitare una casella di testo in CSS. Disabilitarlo non è un'attività di presentazione, devi farlo nel codice HTML utilizzando l'attributo disabled.

Potresti riuscire a mettere insieme qualcosa mettendo la casella di testo sotto un elemento trasparente assolutamente posizionato con z-index ... Ma è semplicemente sciocco, in più avresti bisogno comunque di un secondo elemento HTML.

È possibile, tuttavia, stile caselle di testo disabili (se è questo che vuoi dire) in CSS utilizzando

input[disabled] { ... } 

da IE7 verso l'alto e in tutti gli altri principali browser.

3

** basta copiare e incollare questo codice ed eseguire si può vedere la casella di testo per disabili **

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 

<style>.container{float:left;width:200px;height:25px;position:relative;} 
     .container input{float:left;width:200px;height:25px;} 
     .overlay{display:block;width:208px;position:absolute;top:0px;left:0px;height:32px;} 
</style> 
</head> 
<body> 
     <div class="container"> 
     <input type="text" value="[email protected]" /> 
     <div class="overlay"> 
     </div> 
     </div> 
</body> 
</html> 
+0

** Il codice senza spiegazione è generalmente una cattiva risposta su Stack ** Comunque, questo fa molto poco per un sacco di codice. Dà l'impressione di essere disabile e in un modo piuttosto disordinato. Se uno sviluppatore lo accetta come valido, potrebbe altrettanto facilmente usare un 'input.disabled' e aggiungere la classe tramite javascript, se necessario. Puoi anche usare un gestore di eventi su 'focus' to' blur'. Soluzioni che si adattano facilmente a più di un elemento. –

3

Proseguendo Pekka di risposta, avevo uno stile "style1" su alcune delle mie caselle di testo. È possibile creare un "style1 [disattivato]" in modo da acconciare solo le caselle di testo disabili utilizzando lo stile "style1":

.style1[disabled] { ... } 

funzionato bene su IE8.

+1

'style1' è un nome di classe terribile. È stato generato da uno strumento? – alex

+0

@alex Haha no, il nome è una specie di stringa pt-br scomoda, quindi ho usato "style1". – GBU

38

è possibile disattivare tramite CSS:

pointer-events: none; 

non funziona in tutto il mondo però.

+4

L'input di testo può ancora essere inserito in schede. – alex

+0

'pointer-events: none' non è supportato da IE 8, 9, è per gli elementi SVG solo in 10 ed è infine supportato in 11, in base ai post in http://stackoverflow.com/questions/5855135/css -pointer-events-property-alternative-for-ie – vapcguy

1

Basta provare questo.

<asp:TextBox ID="tb" onkeypress="javascript:return false;" width="50px" runat="server"></asp:TextBox> 

Ciò non consentirà l'inserimento di alcun carattere all'interno del TextBox.

+6

Attenzione a questo. Gli utenti potevano ancora fare clic con il pulsante destro del mouse e scegliere Incolla dal menu di scelta rapida per incollare i dati nella casella di testo. –

Problemi correlati