Отправляет email-рассылки с помощью сервиса Sendsay

[TC] Disabled checkbox: what's wrong?

Vande omentaina, Tiflocomp!
Есть такой скрипт:
<html>
<head>
<title>Grayed field test</title>
<script>
function setGrayed () {
if (document.colors.favorite.value!=4) {
document.colors.other.disabled=true;
}
}
</script>
</head>
<body>
<form name="colors" action="" method=post>
<label for="favorite" accesskey="c">Select your favorite color:</label>
<select name="favorite" size=1 onChange="JavaScript: setGrayed (); return true;">
<option value=1>Red</option>
<option value=2>Green</option>
<option value=3>Blue</option>
<option value=4>Other color</option>
</select>
<input type="checkbox" name="other">I'd like to answer more questions
<input type="submit" name="go" value="Accept form" accesskey="s">
</form>
</body>
</html>
Ожидаемый результат: по каждому движению курсора по комбобоксу скрипт
должен отрабатывать и смотреть, не стоит ли значение "Other color"
(4). Если не стоит, то флажок должен быть дисэйблнут, если стоит
-доступен.
что получаем: во-первых, Осёл ругается страшными словами, что у меня
супермегагиперопасный скрипт или ActiveX (это что, у всех так
будет???). Во-вторых, сначала флажок доступен, что бы я ни делал.
Потом, когда я ставлю "Other color", а затем переключаюсь на другое
значение, флажок становится серым. И дальше что бы я ни делал, он
таковым и остаётся.
Вопрос: что не так?
Спасибо!

Ответить   Anarendil Fri, 10 Jul 2009 15:13:11 +0300 (#883896)

 

Ответы:

Доброго времени суток, уважаемая рассылка и Anarendil.

Friday, July 10, 2009, 3:13:11 PM, you wrote:

Вот вариант данного скрипта (работает как под IE, так и под Firefox)
<html>
<head>
<title>Grayed field test</title>
<script>
function setGrayed ()
{
var favorite = document.getElementById('favorite');
var other = document.getElementById('other');

if (favorite.value!=4)
{
other.disabled=true;
}
else
{
other.disabled=false;
}
}
</script>
</head>
<body onLoad = "setGrayed();">
<form name="colors" action="" method=post>
<label for="favorite" accesskey="c">Select your favorite color:</label>
<select id="favorite" name="favorite" size=1 onKeyUp="setGrayed ();">
<option value=1>Red</option>
<option value=2>Green</option>
<option value=3>Blue</option>
<option value=4>Other color</option>
</select>
<input type="checkbox" id="other" name="other">I'd like to answer more questions
<input type="submit" name="go" value="Accept form" accesskey="s">
</form>
</body>
</html>

У меня такого нет!

Его нужно сначала отключить в onLoad'е

Правильно, вы в условии if ... этого не оговорили.

Удачи!

Ответить   Олег Fri, 10 Jul 2009 21:38:04 +0300 (#883978)

 

Vande omentaina, Олег!

Но я же сказал onChange... А если поставить onKeyUp, то как же будет
отрабатывать скрипт для "мышастых" пользователей?

Ответить   Anarendil Fri, 10 Jul 2009 22:15:09 +0300 (#883989)

 

Доброго времени суток, уважаемая рассылка и Anarendil.

Friday, July 10, 2009, 10:15:09 PM, you wrote:

можно и onChange(), я просто забыл исправить после тестирования
скрипта. :-)

Ответить   Олег Fri, 10 Jul 2009 23:32:45 +0300 (#884005)

 

Vande omentaina, Олег!

А name не прокатит?
И ещё. Это работает действительно только у джозовцев, у зрячих не
пашет.

Ответить   Anarendil Fri, 10 Jul 2009 22:21:55 +0300 (#883993)

 

Доброго времени суток, Anarendil.

Friday, July 10, 2009, 10:21:55 PM, you wrote:

только для IE!

Я уже ответил, но письмо еще не дошло. Измените onKeyUp на onChange (я
забыл это сделать после тестирования скрипта).

Ответить   Олег Fri, 10 Jul 2009 23:36:59 +0300 (#884006)

 

Приветствую всех.

От многоэтажки if... else можно отказаться, что сделает код проще:
...
other.disabled = (favorite.value!=4);
...

Если совсем точно, то для IE "прокатывает" именно использование точки в качестве
селектора для доступа к элементу по имени.

В универсальном виде это будет так:
var elem =document.getElementsByName('elemName').item(0);
То есть, в отличие от id, спецификация подразумевает, что может быть несколько
элементов с одинаковыми именами (атрибутами name), по этой причине возвращается
коллекция элементов, а не один элемент (как в случае .getElementById()).

Успехов. Анатолий.

Ответить   "i_chay" Sat, 11 Jul 2009 12:19:17 +0500 (#884076)

 

Vande omentaina, i_chay!

Погодите, а если у меня пара радиокнопок, то айдишник у них тоже
разный должен быть?
И ещё: если я не даю имя, а только айдишник, я могу его использовать в
качестве $_POST['ElementId']?
P.S. Памятник Анатолию. При жизни. За то, что терпит мои глупые
вопросы и до сих пор не послал меня куда подальше). Спасибо!
Олегу тоже спасибо).

Ответить   Anarendil Sat, 11 Jul 2009 11:31:57 +0300 (#884097)

 

Приветствую всех.
Андрей пишет:

Да. id должен быть уникальным в пределах документа:
http://www.w3.org/TR/REC-html40/struct/global.html

The id attribute assigns a
unique identifier
to an element (which may be verified by an SGML parser).

В контексте вашего вопроса -- нет (но это не значит, что это в принципе невозможно).
В спецификации HTML определено, что управляющий элемент формы должен быть представлен
в http-сообщении парой имя=значение, где имя -- это содержимое атрибута name.
Отправке подлежат только "успешные элементы", а один из признаков успешности
-- это наличие непустого атрибута name. Проще говоря, в случае отсутствия атрибута
name, браузер игнорирует этот элемент при отправке формы.

Есть существенная разница между id и name. Для любого элемента id -- это всегда
id, в то время как предназначение атрибута name зависит от того элемента, в котором
этот атрибут используется.

Успехов. Анатолий.

Ответить   "i_chay" Sat, 11 Jul 2009 14:51:29 +0500 (#884116)