2011-09-23 3 views
32

Voglio avere caselle di testo relative ai radiobutton. Pertanto, ogni pulsante di opzione dovrebbe abilitare la sua casella di testo e disabilitare gli altri. Tuttavia, quando imposto a true l'attributo disabled di textbox, cambia anche l'attributo modificabile. Ho provato a impostare nuovamente l'attributo modificabile true ma non ha funzionato..setAttribute ("disabled", false); modifica attributo modificabile su false

questo era quello che ho provato:

funzione

JS:

elementi
function enable(id) 
{ 
    var eleman = document.getElementById(id); 
    eleman.setAttribute("disabled", false); 
    eleman.setAttribute("editable", true); 
} 

XUL:

<radio id="pno" label="123" onclick="enable('ad')" /> 
<textbox id="ad" editable="true" disabled="true" flex="1" emptytext="asd" onkeypress="asd(event)" tooltiptext="" > 

risposta

70

un elemento disabled è, (autoesplicativo) disabili e quindi logicamente non modificabili. così:

impostare l'attributo disabili [...] cambia l'attributo modificabile troppo

è destinato un comportamento ben definito.

il vero problema qui sembra essere si sta cercando di impostare disabled-false via setAttribute() wich non fa quello che ci si aspetta. un elemento viene disattivato se l'disabled -attribute è impostato, indipendentemente dal suo valore (così, disabled="true", disabled="disabled" e disabled="false" tutti fanno lo stesso: l'elemento viene disattivato).è necessario rimuovere l'attributo invece completo:

element.removeAttribute("disabled"); 

o impostare che immobile direttamente:

element.disabled = false; 
+1

Buona risposta, ma nel secondo caso si dice "imposta direttamente questo attributo" e credo che dovrebbe essere "imposta direttamente la proprietà", poiché si sta modificando la proprietà DOM piuttosto che l'attributo HTML. Sottile differenza ma importante qui penso. – The111

+1

@ The111: grazie per il suggerimento, l'ho cambiato. – oezi

+0

c'è un modo in cui posso usare 'setAttribute()' per fare esattamente la stessa cosa? 'setAttribute (" disabled "," true ");' non funziona; –

6

Prova a fare questo, invece:

function enable(id) 
{ 
    var eleman = document.getElementById(id); 
    eleman.removeAttribute("disabled");   
} 

Per abilitare un elemento devi rimuovere l'attributo disabilitato. Impostarlo su false significa comunque che è disabilitato.

http://jsfiddle.net/SRK2c/

3

il valore attributi disabile è actally non considerato .. di solito se avete notato l'attributo è impostato come disabilitato = "disabilitato" il "disabile" qui non è necessario persay .. quindi la cosa migliore da fare è rimuovere l'attributo.

element.removeAttribute("disabled");  

anche che si possa fare

element.disabled=false; 
9

Basta impostare direttamente la proprietà.

eleman.disabled = false; 
+0

c'è qualche modo posso usare setAttribute() per fare la stessa cosa? setAttribute ("disabile", "true"); non funziona –

+1

@ AjayAradhya: vedere la risposta accettata. L'attributo * disabled * è booleano, la sua presenza imposta il suo valore su true. L'unico modo per risolvere ciò è impostare la proprietà su false o rimuovere l'attributo usando * removeAttribute *. – RobG

0

basta sostituire 'myselect' con il tuo ID

a disable->

document.getElementById("mySelect").disabled = true; 

da abilitare->

document.getElementById("mySelect").disabled = false; 
0

Usando il metodo impostato e rimuovere attributo

function radioButton(o) { 
 

 
    var text = document.querySelector("textarea"); 
 

 
    if (o.value == "on") { 
 
    text.removeAttribute("disabled", ""); 
 
    text.setAttribute("enabled", ""); 
 
    } else { 
 
    text.removeAttribute("enabled", ""); 
 
    text.setAttribute("disabled", ""); 
 
    } 
 
    
 
}
<input type="radio" name="radioButton" value="on" onclick = "radioButton(this)" />Enable 
 
<input type="radio" name="radioButton" value="off" onclick = "radioButton(this)" />Disabled<hr/> 
 

 
<textarea disabled ></textarea>