Логин:

Пароль:

Форумы
Общие вопросы
Document Object Model
Обсуждаем конференцию
Web Usability (test)

Общие вопросы

disable

> <BOBY>

Bobby пишется через дабл b ;-)

>
> <FORM name=KMForm>
> <INPUT NAME="IfRas" TYPE=Checkbox VALUE="yes" onChange=if(d.KMForm.IfRas.checked){d.KMForm.Ras2.disabled=false}else{d.KMForm.Ras2.disabled=true}> <INPUT NAME="Ras2" TYPE=Text VALUE=".gif" SIZE=10 MAXLENGTH=10 DISABLED><P>
>
> </BODY>

У меня есть 2... совета,... нет пусть будут 3.

1. если встречается подобная конструкция с проверками чего либо и она к тому-же может быть вызвана не только из одного места и не только для одного объекта - выносить все нафиг в отдельную функцию, где сможете во первых проверить поддерживать браузер данную функцию или нет, а во вторых - съэкономите кучу кода, если это однотипные действия например дизейбления кнопки.

2. Передавать функции исключительно ссылками на объект или самим объектом. В случае с элементами формы, то объекты очень легко указывать не с помощью "document.forms.hue_moe.tot_element", а просто "this.form.tot_element" - короче, понятнее и легче.

3. Уже ближе к теме - учитывать того, что если элемент формы - disabled, то таким образом не только запрещаете посетителю менять его значение... его значение еще НЕ ПЕРЕДАЕТСЯ вместе с данными формы.

Я знаю, что вы знаете последнее, но у знакомого парня были серьезные проблемы с этим.


Теперь о самом скрипте, я бы написал примерно так:

<script language=JavaScript><!--

function changeElemAbility(elem, condition) {
if (arguments.length == 1) elem.disabled = (elem.disabled)? false : true;
else elem.disabled = (condition)? false : true;
}

// --></script>

Получилась маленькая и достаточно универсальная функция, которая может менять состояние свойства disabled не только на указанное, но если не указано состояние, то просто меняет его... не знаю насколько понятно объяснил, но в коде все прозрачно ;-)

Примечание: проверка на состояние condition делается, потому, что когда disabled - true, то он недоступен, что в некотором роде не соответствует логическим понятиям. Обычно, вызывая функцию и говоря ей "true", то ожидаеш, что что-то будет разрешено, а не наоборот. Если кому-то не нравиться, то можно проверку убрать получиться вот такая строчка:
else elem.disabled = condition;


Как использовать функцию в примере, приведенном выше:

<input type=checkbox name="IfRas" checked
onChange="changeElemAbility(this.form.Ras2, this.checked);">
<input type=text name="Ras2" value=".gif" size=10 maxlength=10>

На мой взгляд получилось элегантнее... теперь нужно посмотреть работает или нет все это ;-)
СообщениеАвторДата
Gilmour13.06.2001 23:44
Maniac14.06.2001 02:01
Дмитрий Чернов14.06.2001 09:22
Maniac14.06.2001 09:36
Konstantin A. M.14.06.2001 09:12
Гость04.03.2003 16:38
Leechy15.06.2001 00:24
Maniac14.06.2001 09:32
Leechy15.06.2001 01:00
Maniac15.06.2001 16:01
Leechy15.06.2001 16:42
Maniac15.06.2001 17:09
Konstantin A. M.14.06.2001 11:20
Maniac14.06.2001 12:16
Gilmour14.06.2001 07:01