Консультация № 160378
13.02.2009, 13:46
0.00 руб.
0 9 2
Здравствуйте, уважаемые эксперты! Есть такая проблема, в HTML форме есть 2 элемента: Checkbox и OptionBox. Необходимо сделать так, чтобы при щелчке на Checkbox'е OptionBox был бы доступен (т.е. если стоит галочка), и обратно, при снятии галочки Option недоступен. Помогите, пожалуйста, решить эту проблему.. Вот пример кода котрый только ставит галочку, но не снимают её:

Приложение:
<INPUT TYPE="checkbox" id="type_wood" Name="type_wood" ONCLICK="skil()">

<SCRIPT TYPE="text/javascript">
var frmObject = document.forms ["frm" ] ;
var woodgrObject = frmObject.elements["woodgr"];

function skil(){
if (woodgrObject.disabled = true) {
woodgrObject.disabled = false;
} else {
woodgrObject.disabled = true;
}
} ;
</SCRIPT>

Обсуждение

Неизвестный
13.02.2009, 14:04
общий
Секундочку, что-то я напутал, по-моему... Сейчас исправлю...
Неизвестный
13.02.2009, 14:09
общий
Навскидку:
Код:

<label>CheckBox<input type='checkbox' id='checkbox' onclick='document.getElementById("optionbox").disabled = !this.checked'></label>
<label>OptionBox<input type='checkbox' id='optionbox' disabled></label>

Неизвестный
13.02.2009, 14:12
общий
это ответ
Здравствуйте, Trigger!
При привязывании Вашего действия к событию ONCHANGE, все будет нормально. Единственное, чтобы я еще сделал, - это переделал присвоения без использования коллекций. То есть,

var woodgrObject = document.getElementById('woodgr');
Еще можно переделать немного CHECKBOX - добавить атрибут value="1". Тогда функцию можно переделать так.
function skill(value)
{
woodgrObject.disabled = value;
}

Если в ONCHANGE написать вот так: skill(this.value), то код хитрым образом сокращается в размерах и становится лаконичнее.
С уважением, Товарищ Бородин
Неизвестный
13.02.2009, 14:13
общий
Ух ты... Практически одно и тоже получилось... Пожалуй, действительно, вместо this.value лучше подставить !this.checked. Это будет правильнее.
Неизвестный
13.02.2009, 14:14
общий
это ответ
Здравствуйте, Trigger!
У вас в условии проверки не сравнение переменных а присваивание значения...
Так как вы предоставили не совсем полный скрипт, я добавил в него недостающие элементы и получилось так

Приложение:
<INPUT TYPE="checkbox" id="type_wood" Name="type_wood" onclick="skil()">
<INPUT TYPE="radio" id="woodgr" disabled="disabled" Name="woodgr" >

<SCRIPT TYPE="text/javascript">
var woodgrObject = document.getElementById('woodgr');

function skil(){
if (woodgrObject.disabled) {
woodgrObject.disabled = false;
} else {
woodgrObject.disabled = true;
}
} ;
</SCRIPT>
Неизвестный
13.02.2009, 14:15
общий
Спасибо большое, второй вариант подошел!!
Неизвестный
13.02.2009, 14:20
общий
this.value использовать нельзя, т.к. там может храниться значение для передачи вместе с submit формы. Насчет инверсии значения с false на true и обратно (второй вариант) - не уверен насчет двойных щелчков и прочих непредсказуемых ситуаций, надо проверять... А если все нормально, то можно записать короче:

Код:
woodgrObject.disabled = !woodgrObject.disabled;
Неизвестный
13.02.2009, 14:27
общий
Так не надо выполнять это по onclick, и никакие двойные щелчки не сработают! ONCHANGE работает независимо от того, был ли по чекбоксу двойной щелчок или одинарный. Изменилось у чекбокса состояние - действие выполняется.
Неизвестный
13.02.2009, 14:30
общий
Согласен. Совсем забыл про это полезное событие
Форма ответа