2011-09-23 17 views
32

Chcę mieć pola tekstowe związane z radiobuttons. Dlatego każdy przycisk radiowy powinien włączyć pole tekstowe i wyłączyć pozostałe. Jednak gdy ustawię wyłączony atrybut textbox na true, zmieni on również atrybut editable. Próbowałem ponownie ustawić atrybut editable, ale nie zadziałało..setAttribute ("disabled", false); zmienia atrybut edytowalny na false

To było to, czego próbowałem:

JS funkcję:

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

XUL elementów:

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

Odpowiedz

70

element disabled jest (self-wyjaśniając) niepełnosprawnych, a tym samym logicznie nie można edytować. tak:

zestaw atrybut wyłączone [...] zmienia edytowalny atrybut zbyt

rozumie się dobrze zdefiniowane zachowanie.

Prawdziwy problem polega na tym, że próbujesz ustawić disabled na false przez setAttribute(), który nie spełnia Twoich oczekiwań. element jest wyłączony, jeśli ustawiony jest atrybut disabled, niezależnie od jego wartości (tak, disabled="true", disabled="disabled" i disabled="false" wszystkie robią to samo: element zostaje wyłączony).należy zamiast usunąć kompletny atrybut:

element.removeAttribute("disabled"); 

lub ustawić tę właściwość bezpośrednio:

element.disabled = false; 
+1

Dobra odpowiedź, ale w tym drugim przypadku mówisz "ustaw ten atrybut bezpośrednio" i uważam, że powinno to być "ustawienie tej właściwości bezpośrednio", ponieważ edytujesz właściwość DOM, a nie atrybut HTML. Subtelna różnica, ale ważne tutaj myślę. – The111

+1

@ The111: dzięki za podpowiedź, zmieniłem to. – oezi

+0

jest jakiś sposób mogę użyć 'setAttribute()', aby zrobić dokładnie to samo? 'setAttribute (" disabled "," true ");' nie działa; –

6

spróbować zrobić to zamiast:

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

Aby włączyć element musisz usunąć atrybut wyłączony. Ustawienie go na false oznacza, że ​​jest wyłączone.

http://jsfiddle.net/SRK2c/

3

niepełnosprawnych wartości atrybutów jest actally nie uważane .. zwykle jeśli zauważyłeś atrybut jest ustawiony jako disabled = „disabled” the „wyłączony” nie jest tu konieczne persay .. więc najlepszym rozwiązaniem zrób to, aby usunąć atrybut.

element.removeAttribute("disabled");  

również można zrobić

element.disabled=false; 
9

Wystarczy ustawić właściwość bezpośrednio.

eleman.disabled = false; 
+0

jest jakiś sposób mogę używać setAttribute(), aby zrobić dokładnie to samo? setAttribute ("disabled", "true"); nie działa –

+1

@ AjayAradhya - zobacz akceptowaną odpowiedź. Atrybut * disabled * jest wartością logiczną, jej obecność ustawia wartość true. Jedynym sposobem naprawy jest ustawienie właściwości na false lub usunięcie atrybutu za pomocą * removeAttribute *. – RobG

0

prostu zastąpić 'myselect' z identyfikatorem

do Disable>

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

, aby włączyć->

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

Stosując metodę ustawić i usunąć atrybut

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>