Роботландский Университет © А.А.Дуванов

ОБЪЕКТНАЯ МОДЕЛЬ БРАУЗЕРА

i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | ?
урок 8 | зачет | задания | дополнения | урок 10

урок 9: формы (флажки, радиокнопки)

Рассмотрим еще две разновидности тега <INPUT>:

флажки

Флажки, или как говорят, кнопки с независимой фиксацией — хорошо знакомый элемент компьютерного интерфейса:

Отметьте правильные утверждения:

 100%10 есть true
 !0     есть true
 ""     есть true
 1      есть true
 

Флажки не зависят один от другого. Их можно устанавливать и сбрасывать в любой комбинации.

Флажок задается командой:

<INPUT type="checkbox">

Дополнительные атрибуты:

программное управление

Объект, построенный браузером для тега <INPUT type=checkbox>, имеет свойство checked. Это свойство принимает значение true, когда флажок установлен, и false — в противном случае.

<FORM>
  <INPUT name=flag type=checkbox>
  <INPUT type=button value=Проверить
         onclick="if(this.form.flag.checked)
                    alert('флажок установлен')
                  else
                    alert('флажок не установлен')">
  <INPUT type=button value=Изменить
         onclick="this.form.flag.checked=
                    !this.form.flag.checked">
</FORM>

Проделайте следующие опыты:

  1. Нажмите кнопку Проверить. Появится сообщение “флажок не установлен”. Флажок и в самом деле не установлен, ведь он задан кодом, в котором отсутствует атрибут checked:

    <INPUT type=checkbox name=flag>

    Свойство checked объекта, построенного для тега этого <INPUT>, имеет значение false, как и выражение this.form.flag.checked, в команде if.

  2. Нажмите кнопку Изменить. Сработает код:

    this.form.flag.checked = !this.form.flag.checked;

    Свойство checked изменит свое значение с false на true. На экране в поле флажка появляется отметка (хотя мы ее там не ставили, а устроили ее появление на экране при помощи программного кода).

  3. Нажмите кнопку Проверить. На экран выводится сообщение “флажок установлен”. Теперь выражение this.form.flag.checked имеет значение true.

Как видите, свойство checked можно не только читать, но и менять, устанавливая или сбрасывая флажок программным путем.

Обратите внимание на то, что свойство checked объекта имеет совсем другой смысл, чем одноименный атрибут тега <INPUT>. Атрибут указывает, что флажок установлен по умолчанию, а свойство хранит текущее состояние флажка, которое может меняться пользователем или программой.

Программы, которые “страдают склерозом”, могут легко проверить, был ли установлен атрибут checked в теге <INPUT>, если обратятся к свойству defaultchecked соответствующего объекта.

<FORM>
  <INPUT name=flag type=checkbox >
  <INPUT type=button value=checked
         onclick="alert(this.form.flag.checked);">
  <INPUT type=button value=defaultChecked
         onclick="alert(this.form.flag.defaultChecked);">
</FORM>

Проделайте следующие опыты:

  1. Нажмите последовательно кнопки checked; и defaultChecked. Получим сообщения “true” и “true”. Это означает, что флажок установлен и отметка установлена по умолчанию.
  2. Снимите отметку с флажка и снова нажмите кнопки checked и defaultChecked. Получим сообщения “false” и “true”. Это означает, что флажок не установлен, но он был установлен по умолчанию.
  3. Уберите из тега <INPUT type=checkbox checked name=flag> атрибут checked и снова нажмите кнопки checked и defaultChecked. Получим сообщения “false” и “false”. Это означает, что флажок сейчас не установлен и не был установлен по умолчанию.
  4. Отметьте флажок и нажмите кнопки checked и defaultChecked. Получим сообщения “true” и “false”. Это означает, что флажок установлен, но он не был установлен по умолчанию.

пример



Отметьте выражения со значением true:

 !0 && !""
 !0 || !""
  0 && !""
  0 || !""
 
Ниже представлена программа для этого фрагмента “зачетного класса”.

В качестве значения атрибута name в тегах-флажках можно указывать одно и то же имя для флажков, входящих в одну группу. Доступ к отдельному флажку в группе выполняется так же, как к элементам массива при помощи индекса. Флажки в группе нумеруются в порядке их следования в HTML-коде, и нумерация начинается с нуля. Форму из предыдущего документа можно записать так:

радиокнопки

Радиокнопки (селекторные кнопки, переключатель) предназначены для выбора одного варианта из нескольких альтернативных. Подобно кнопочному переключателю диапазона волн в радиоприемнике, выбор одной кнопки автоматически снимает отметку с другой.

Ваш выбор:

 Корней Чуковский
 Уолтер Де ла Мэр
 Льюис Кэрролл
 Владимир Высоцкий
 Олег Какаулин

В группе радиокнопок активной может быть только одна. Отметка на новой кнопке автоматически снимает отметку на старой.

Радиокнопка задается командой:

<INPUT type=radio>

Дополнительные атрибуты:

программное управление

Объект, построенный браузером для тега <INPUT type=radio> имеет свойство checked. Это свойство принимает значение true, когда кнопка выбрана и false — в противном случае.

Значит, можно проверить, выбрана кнопка или нет, и использовать это в своей программе:

<FORM>
  <INPUT name=tst type=radio>
  <INPUT type=button value=Проверить
         onclick="if(this.form.tst[0].checked)
                    alert('отметка на 1-ой кнопке установлена')
                  else
                    alert('отметка на 1-ой кнопке не установлена');">
  <INPUT type=button value=Изменить
         onclick="var x=this.form.tst[0].checked;
                  this.form.tst[0].checked=this.form.tst[1].checked;
                  this.form.tst[1].checked=x;"><BR>
  <INPUT name=tst type=radio checked>
</FORM>

Проделайте следующие опыты:

  1. Нажмите кнопку Проверить. Появится сообщение “Отметка на 1-ой кнопке не установлена”. Радиокнопка и в самом деле выключена, ведь она задана кодом <INPUT type=radio name=tst>, в котором отсутствует атрибут checked. Это означает, что свойство checked объекта, построенного для этой радиокнопки, имеет значение false, как и выражение this.form.tst[0].checked в команде if.
  2. Нажмите кнопку Изменить. Выполнится код:
    onclick="var x = this.form.tst[0].checked;
             this.form.tst[0].checked=this.form.tst[1].checked;
             this.form.test[1].checked=x;"
    

    Этот код перебросит отметку со второй кнопки на первую.

  3. Нажмите кнопку Проверить. Последует сообщение “Отметка на 1-ой кнопке установлена”. Это означает, что теперь выражение this.form.tst[0].checked имеет значение true.

Свойство checked объекта не совпадает с одноименным атрибутом тега <INPUT>. Атрибут checked устанавливает отметку на кнопке по умолчанию, а свойство checked отражает текущее состояние кнопки. Как и в случае с флажками, атрибуту checked соответствует свойство defaultChecked.

Изменяя активность одной кнопки переключателя, программист берет на себя ответственность правильно изменить свойство checked у всех его остальных кнопок (отмечена может быть только одна кнопка в группе).

пример. умножитель

10
20
30
40
  *  
2
3
4
5
 

В примере представлены два независимых переключателя. Программа “умножителя” приводится ниже.


Дополнительный материал

зачетный класс

Нажмите кнопку Сброс, затем приступайте к решению.

  1. В HTML-коде задана форма:

    <FORM name=forma>
    Отметьте коды, после выполнения которых
    переменная y получит значение 1.
    <PRE>
    <INPUT type=reset value=Сброс>
    <INPUT type=checkbox name=ch> x=2; y = --x;
    <INPUT type=checkbox name=ch> x=2; y = x--;
    <INPUT type=checkbox name=ch> y=1; x = ++y;
    <INPUT type=checkbox name=ch> y=1; x = y++;
    <INPUT type=checkbox name=ch> y=2; x += y;
    <INPUT type=button value=Проверить
           onClick='var ans="не верно";
                    if(...) ans="верно";
                    this.form.result.value=ans;'>
    <INPUT type=text size=15 name=result value="">
    </PRE>
    </FORM>
    

    Отметьте правильные условия, которые могут заместить многоточие в коде формы.
    document.forma.ch[2].checked
    document.forma.ch[0].checked
    document.forma.ch[3].checked
    document.forma.ch[4].checked
    this.form.ch[0].checked
    this.form.ch[2].checked && this.form.ch[3].checked
    this.form.ch[0].checked && this.form.ch[1].checked
    this.form.ch[0].checked && this.form.ch[3].checked
    this.form.ch[1].checked
    все условия неверные


  2. В HTML-коде задана форма:

    <FORM name=forma>
    Заданы переменные:
    <PRE>
    var set = new Array(1,2,3,4,5,6,7,8,9,10);
    var s = 0;
    var i;
    </PRE>
    Отметьте правильный код (он один), вычисляющий
    сумму элементов массива:
    <PRE>
    <INPUT type=reset value=Сброс>
    <INPUT type=radio name=r checked> for(;i;)s+=set[i--];
    <INPUT type=radio name=r> for(i=1;i<set.length;i++)s+=set[i];
    <INPUT type=radio name=r> for(i=set.length;i;i--)s+=set[i];
    <INPUT type=radio name=r> for(i=set.length-1;i;i--)s+=set[i];
    <INPUT type=radio name=r> for(i=set.length;--i>=0;)s+=set[i];
    <INPUT type=radio name=r> for(i=set.length;--i;)s+=set[i];
    <INPUT type=radio name=r> for(i=set.length;i-->=0;)s+=set[i];
    <INPUT type=button value=Проверить
           onClick='var answer="не верно";
                    if(...) answer="верно";
                    this.form.result.value=answer;'
    <INPUT type=text size=15 name=result value="">
    </PRE>
    </FORM>
    

    Отметьте правильные условия, которые могут заместить многоточие в коде формы.
    document.forma.r[2].checked
    document.forma.r[0].checked
    document.forma.r[3].checked
    document.forma.r[4].checked
    this.form.r[5].checked
    this.form.r[4].checked
    this.forma.r[1].checked
    this.forma.r[4].checked
    this.form.r[1].checked
    все условия неверные


Чтобы увидеть результат работы, нажмите кнопку Оценка.


Дополнительный материал

задания

  1. Создайте HTML-страницу с работающей формой из первого задания зачетного класса.
  2. Создайте HTML-страницу с работающей формой из второго задания зачетного класса.
  3. Создайте HTML-приложение с такой формой:

    Страничка по заказу

    заголовок

    картинка собака
    одинокий цветок
    букет
    насос

    фон
     
    текст
     
     
     
     
     
     

    По нажатию на кнопку Показать приложение должно открыть новое окно и показать в нем заказанные картинки с короткими подписями. Новое окно должно создаваться “на лету” с использованием информации, которую ввел в форму пользователь.

    Можно использовать картинки из каталога ".\pic" книжки:

    dog.jpg (собака)
    bigdaisy.jpg (одинокий цветок)
    flower.jpg (букет)
    nasos.jpg (насос)

    Пример возможной страницы:

  4. Зайдите в электронный магазин за "покупками". Измените приложение (скопировав его текст в новый файл):
  5. Добавьте в таблицу с описанием товаров электронного магазина из предыдущего задания колонку с их изображением.

 

 

содержание урок 8 урок 10 письмо автору об авторах