2011-09-23 9 views
32

Quiero tener cuadros de texto relacionados con botones de radio. Por lo tanto, cada botón de radio debería habilitar su cuadro de texto y desactivar los demás. Sin embargo, cuando configuro el atributo disabled de textbox en true, también cambia el atributo editable. Intenté volver a configurar el atributo editable true pero no funcionó..setAttribute ("deshabilitado", falso); cambia el atributo editable a falso

Esto fue lo que he intentado:

función

JS:

elementos
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="" > 

Respuesta

70

un elemento disabled es, (autoexplicativas) con discapacidad y por lo tanto, lógicamente, no se puede editar. por lo que:

establecer el atributo de personas con discapacidad [...] cambia el atributo editable demasiado

tiene por objeto un comportamiento bien definido.

El problema real aquí parece ser que estás tratando de configurar disabled en a través de setAttribute() que no hace lo que estás esperando. un elemento se deshabilita si se establece disabled -tributo, independientemente de su valor (por lo tanto, disabled="true", disabled="disabled" y disabled="false" hacen todos lo mismo: el elemento se desactiva).en su lugar debe quitar el atributo completo:

element.removeAttribute("disabled"); 

o establecer que la propiedad directa:

element.disabled = false; 
+1

Buena respuesta, pero en el último caso dices "establecer ese atributo directamente" y creo que debería ser "establecer esa propiedad directamente", ya que estás editando propiedad DOM en lugar de atributo HTML. Diferencia sutil pero importante aquí, creo. – The111

+1

@ The111: gracias por la sugerencia, cambié eso. – oezi

+0

¿hay alguna manera en que pueda usar 'setAttribute()' para hacer exactamente lo mismo? 'setAttribute (" disabled "," true ");' no funciona; –

6

Trate de hacer esto en su lugar:

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

Para activar un elemento tienes que eliminar el atributo desactivado Establecerlo en falso todavía significa que está deshabilitado.

http://jsfiddle.net/SRK2c/

3

el valor de los atributos con discapacidad es actally no se considera por lo general .. si ha notado el atributo se establece como discapacitados = "desactivado", el "desactivado" aquí no es necesario persay .. por lo tanto lo mejor que puede hacer es eliminar el atributo.

element.removeAttribute("disabled");  

también se podría hacer

element.disabled=false; 
9

Sólo hay que establecer directamente la propiedad:.

eleman.disabled = false; 
+0

¿hay alguna manera puedo usar setAttribute() para hacer exactamente lo mismo? setAttribute ("deshabilitado", "verdadero"); no funciona –

+1

@ AjayAradhya-ver la respuesta aceptada. El atributo * disabled * es booleano, su presencia establece su valor en true. La única manera de solucionarlo es establecer la propiedad como falsa o eliminar el atributo con * removeAttribute *. – RobG

0

simplemente reemplazar 'MySELECT' con su identificador de

a disable->

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

para habilitar->

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

Utilizando el método establecido y eliminar atributo

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>