Лабораторная работа
: Java script
Размещение javascript-кода
Javascript-код может быть размещен как на самой
странице, так и во внешнем файле.
Javascript-код на странице
Сценарии,
написанные на языке javascript, могут
располагаться на самой html-странице между
тегами <script></script>, которые в
свою очередь обычно находятся в тегах <head></head>. У тега <script>
должен быть указан параметр language, который и
указывает язык написания скрипта:
<html>
<head>
<title>Заголовок документа</title>
<link rel="stylesheet"
type="text/css" href="style.css">
<script
language="javascript"></script>
</head>
<body>
</body>
</html>
Теоретически
теги <script></script> могут
располагаться и в теле документа (в тегах <body></body>). Выполняться такой сценарий будет тогда, когда
браузер "дочитает" страницу до этого места (до тегов <script></script>).
Использовать такой способ сейчас не принято.
Javascript-код во внешнем файле
Создайте
в блокноте страницу (пока пустую) и сохраните ее как script.js в ту же папку, где лежит html-страница:
JavaScript обработчики событий
Давайте
напишем нашу первую программу. Для этого сделаем исключение и поместим наш javascript-код на html-странице.
Итак, откройте (или создайте) html-страницу и
поместите в нее следующий код:
<html>
<head>
<title>Заголовок документа</title>
<link rel="stylesheet"
type="text/css" href="style.css">
<script language="javascript">
document.write("Моя первая страница.");
</script>
</head>
<body>
</body>
</html>
Откройте
эту страницу в браузере, она выглядит так:
Моя
первая страница
Давайте
разберемся как это работает. Браузер читает нашу html-страницу,
видит оператор для выполнения document.write("Моя первая страница."); и выполняет его.
Рассмотрим из чего состоит сам оператор (инструкция)
При
интерпретации html-страницы браузер создает объекты javascript. Они хранятся в
виде иерархической структуры, отражая структуру документа, например:
На
самом верхнем уровне находится объект window, представляющий окно браузера и
являющийся "родителем" всех остальных объектов. Расположенные ниже
могут иметь свои подчиненные объекты. Так объект document (текущая страница)
может иметь дочерний объект form (форма) и т.д.
Все
объекты имеют методы (отделяются от объекта точкой), например:
document.write
позволяет писать текст в текущую страницу,
window.open
открывает новое окно браузера.
Также
объекты имеют свойства, например:
document.bgcolor
содержит значение фонового цвета текущей страницы,
document.title
содержит заголовок страницы.
Все
инструкции программного кода заканчиваются точкой с запятой. Об этом надо
помнить.
Сценарий,
который мы написали, выполнился немедленно после загрузки страницы. Однако в
большинстве случаев нам нужно, чтобы сценарий выполнялся после каких-либо
действий пользователя: нажатия на кнопку или ввода текста. Т.е. в ответ на
пользовательское событие.
Для
этого в тегах элементов страницы введены параметры обработки событий, задающие
действия, выполняемые при возникновении события, связанного с элементом.
Например:
<div
onClick="addText();"></div>
Здесь
Click - событие (щелчок по div-у), onClick - обработчик события, addText() -
имя функции, которая сработает при возникновении этого события (щелчка по
div-у).
Функции
мы будем рассматривать в следующем уроке, а сейчас перечислим события, которые
поддерживаются javascript. Запоминать их не следует, в дальнейшем можете просто
обращаться к этой таблице.
событие |
когда
происходит |
обработчик
события |
Blur |
потеря
объектом фокуса |
onBlur |
Change |
пользователь
изменяет значение элемента |
onChange |
Click |
пользователь
щелкает мыщью по объекту |
onClick |
DblClick |
пользователь
делает двойной щелчок мышью по объекту |
onDblClick |
DragDrop |
пользователь
перетаскивает мышью объект |
onDragDrop |
Error |
возникновение
javascript-ошибки |
onError |
Focus |
окно
или элемент формы получает фокус |
onFocus |
KeyDown |
пользователь
нажимает клавишу клавиатуры |
onKeyDown |
KeyPress |
пользователь
удерживает нажатой клавишу клавиатуры |
onKeyPress |
KeyUp |
пользователь
отпускает клавишу клавиатуры |
onKeyUp |
Load |
документ
загружается в браузер |
onLoad |
MouseDown |
пользователь
нажимает кнопку мыши |
onMouseDown |
MouseOut |
указатель
мыши выходит за пределы элемента |
onMouseOut |
MouseOver |
указатель
мыши помещается над элементом |
onMouseOver |
MouseUp |
пользователь
отпускает кнопку мыши |
onMouseUp |
Move |
пользователь
перемещает окно |
onMove |
Reset |
пользователь
нажимает кнопку "reset" формы |
onReset |
Resize |
пользователь
изменяет размеры окна или элемента |
onResize |
Select |
пользователь
выбирает элемент формы |
onSelect |
Submit |
пользователь
нажимает кнопку "submit" формы |
onSubmit |
Unload |
пользователь
закрывает документ |
onUnload |
Хорошим
стилем программирования является оформление действий, выполняемых при обработке
событий, в виде функций. Их мы и будем изучать в следующем уроке.
Функции
Функция
- это именованная последовательность операторов (инструкций). Любая функция
имеет следующий синтаксис:
function
имя (){
оператор;
.......
оператор;
}
Сначала
идет ключевое слово function, затем имя функции, затем в круглых скобках
перечисляются параметры (если они есть), затем в фигурных скобках перечисляются
операторы, т.е. последовательность выполняемых действий. Каждый оператор
заканчивается точкой с запятой.
Рассмотрим
на примере. Во втором уроке мы создали html-страницу, страницу script.js для
функций и подключили одну к другой. Эти страницы мы и будем использовать.
Поместим в html-страницу следующий код:
<html>
<head>
<title>Заголовокдокумента</title>
<link rel="stylesheet"
type="text/css" href="style.css">
<script type="text/javascript"
src="script.js"></script>
</head>
<body>
<div onClick="showMessage();">Щелкнименя</div>
</body>
</html>
Мы
указали, что при щелчке пользователя по div-у (т.е. по словам "Щелкни
меня") должна быть вызвана функция с именем "showMessage".
Теперь на странице script.js надо написать саму функцию
"showMessage". Открываем страницу script.js и пишем:
function
showMessage(){
alert ("Вы щелкнули по div-у");
}
Наша
функция "showMessage" будет выполнять одно действие - отображать окно
предупреждений с текстом "Вы щелкнули по div-у". alert - это стандартная
функция javascript, которая и выводит окно предупреждений, мы лишь задаем текст
для этого окна.
В
javascript есть стандартный набор функций, который можно использовать
(например, alert) и так называемые пользовательские функции, т.е. те, которые мы
создаем сами. Некоторые функции javascript мы будем изучать по мере
необходимости, некоторым же будут посвящены отдельные уроки.
Вернемся
к нашему примеру. Откройте вашу html-страницу с помощью браузера и щелкните по
div-у. Можете щелкнуть и в примере ниже.
Щелкни
меня
Таким
образом, мы рассмотрели механизм работы обработки событий:
В
html-странице мы привязываем к нужному элементу обработчик события (onClick,
onMouseUp и т.д.), в качестве значения которого указываем имя функции, которая
и должна сработать, когда настанет событие.
На
странице с расширение .js мы пишем код этой функции, т.е. инструкции, которые
должны быть выполнены, если функция инициализирована (к ней обратились).
Давайте
усложним задачу и напишем сценарий, который будет рассчитывать площадь
прямоугольника по введенным пользователем длине и ширине. Для этого сначала
разместим на html-странице нужные элементы формы:
<html>
<head>
<title>Расчет
площади прямоугольника</title>
<link rel="stylesheet"
type="text/css" href="style.css">
<script type="text/javascript"
src="script.js"></script>
</head>
<body>
<form name="forma1">
Введитедлинупрямоугольника<input type="text" name="t1"
size="10"><br><br>
Введитеширинупрямоугольника<input type="text" name="t2"
size="10"><br><br>
<input type="button"
name="button" value="Вычислить"><br><br>
Площадьпрямоугольникаравна<input type="text" name="res"
size="10">
</form>
</body>
</html>
Итак,
пользователь вводит значения ширины и длины и нажимает на кнопку
"Вычислить". После чего, в поле площадь должен появиться результат.
Таким образом, событие наступает при нажатии на кнопку "Вычислить",
значит именно к ней мы и привяжем обработчик события. Функцию вычисления
площади назовем "areaRectangle":
.......
<input
type="button" name="button" value="Вычислить"
onClick="areaRectangle();"><br><br>
.......
Теперь
пришло время написать саму функцию "areaRectangle". Для этого откроем
страницу script.js и напишем заготовку для функции:
function
areaRectangle(){
}
Теперь
надо написать тело функции. Для начала объявим три переменные: a - значение
длины прямоугольника, b - значение ширины прямоугольника, s - площадь
прямоугольника:
function areaRectangle(){
var a;
var b;
var
s;
}
Значение
(value) a должно браться из текущей страницы (document), из формы с именем
"forma1", из текстового поля с именем "t1". Так это и
записывается document.forma1.t1.value, т.е. перечисляются через точку имена
объектов от родительского до нужного (иерархическую структуру объектов мы
обсуждали в предыдущем уроке). Последним указывается необходимое свойство
объекта (value).
Аналогично
и для значения b - document.forma1.t2.value.
А
наша переменная s - есть произведение a на b. Запишем это в тело функции:
function areaRectangle(){
var
a=document.forma1.t1.value;
var
b=document.forma1.t2.value;
var
s=a*b;
}
Осталось
только написать инструкцию записи вычисленной площади в текстовое поле с именем
"res" нашей формы. Т.е нам надо, чтобы в текщую страницу, в форму с
именем "forma1", в текстовое поле с именем "res", в
качестве значения (value) было присвоено значение s. Так и запишем:
function areaRectangle(){
var
a=document.forma1.t1.value;
var
b=document.forma1.t2.value;
var s=a*b;
document.forma1.res.value=s;
}
Параметры функций
Обратите
внимание, в функции мы используем имя формы - forma1, его мы и сделаем
параметром. Т.е. перепишем нашу функцию следующим образом:
function
areaRectangle(obj){
var a=obj.t1.value;
var
b=obj.t2.value;
var s=a*b;
obj.res.value=s;
}
Т.е
мы указали, что функция должна принять в качестве параметра какой-то объект
(obj) и производить все действия с ним. Нам осталось на нашей html-странице
указать имя объекта:
.......
<input
type="button" name="button" value="Вычислить"
onClick="areaRectangle(forma1);"><br><br>
.......
Теперь,
когда нам понадобится вычислить площадь на какой-либо другой странице, нам
достаточно будет вызвать функцию areaRectangle(), а в скобках указать имя
формы. Проверьте работу нашего сценария в браузере.
Ветвления в программе - оператор
if
Очень
часто возникает ситуация, когда нам нужно выполнить какое-либо действие в
зависимости от какого-либо условия. Например, у нас интернет-магазин одежды. Мы
спрашиваем у пользователя кто он (мужчина или женщина) и в зависимости от
ответа отображаем список соответствующих товаров (мужских или женских). При
написании подобных программ используется условный оператор if . Синтаксис у
него следующий:
if
B {S1}
else
{S2}
где
B - выражение логического типа, а S1 и S2 - операторы.
Работает
это так: вычисляется значение выражения B, если оно истинно, то выполняется
оператор S1, если оно ложно, то выполняется оператор S2.
Пример
function maxZnach(obj){
var
a=1*obj.zn1.value;
var
b=1*obj.zn2.value;
var
c=1*obj.zn3.value;
var m=a;
if (b>m)
m=b;
if (c>m)
m=c;
obj.res.value=m;
}
Оператор
выбора switch
В
предыдущем уроке мы познакомились с оператором if. Он удобен, когда нужно
совершить какое-либо действие в зависимости от выбора пользователя. Но что если
таких выборов будет много? Например, мы знаем прогноз погоды на неделю вперед.
А выдаем прогноз только на один день, на тот который выберет пользователь. Как
это сделать?
Синтаксис
у него следующий:
switch
(B)
{
case L1:
S1;
case L2: S2;
... ... ...
case Ln: Sn;
default:S
}
где
B - выражение, L1, L2, ..., Ln - литералы, а S1, S2, ..., Sn - операторы.
Работает
это так: вычисляется значение выражения B. Если B равно L1, то выполняется
оператор S1. Если B равно L2, то выполняется оператор S2 и т.д. Если B не равно
ни одному из значений, то выполняется оператор S.
Давайте
перепишем код нашей последней функции с помощью оператора switch.
function Vday1(obj){
var
a=obj.zn.value;
var
s;
switch (a)
{
case 'понедельник': s="В понедельник
будет ветрено, температура воздуха поднимется до +20 градусов";break;
case 'вторник': s="Во вторник будет
солнечно, температура воздуха поднимется до +25 градусов"; break;
case 'среда': s="В среду будет
прохладно, температура воздуха опустится до +17 градусов"; break;
case 'четверг': s="В четверг будет
пасмурно, температура воздуха опустится до +10 градусов"; break;
case 'пятница': s="В пятницу будет
облачно, температура воздуха поднимется до +15 градусов"; break;
case 'суббота': s="В субботу будет
ветрено, температура воздуха поднимется до +27 градусов"; break;
case 'воскресенье': s="В воскресенье
будет ясно, температура воздуха поднимется до +30 градусов";break;
default: s='Укажите правильно день недели'
}
obj.res.value=s;
}
Результат
тот же, а код гораздо короче, да и читабельнее.
Оператор
break используется, чтобы обеспечить завершение работы переключателя после
выполнения нужного варианта. Если его опустить ничего не изменится, просто с
ним сценарий работает быстрее, хотя в данном примере это и незаметно.
Циклы
Цикл
for
Самый
популярный вид циклов - цикл for. Синтаксис у него следующий:
for
(A; B; I){S}
где
A
- первоначальное выражение,
B
- условие продолжения. Если это выражение ложно, то выполнение цикла
завершается,
I
- выражение инкремента,
{}
- тело цикла,
S - операторы.
function summa(obj) {
var
summa=0;
var
a1=1*obj.a1.value;
var
a2=1*obj.a2.value;
for (var i
= a1; i <= a2; i++) {
summa+=i;
}
obj.result.value = summa;
}
Цикл
while
Не
менее популярный вид циклов - цикл while. Синтаксис у него следующий:
while
(B){S}
где
B
- условие продолжения. Если это выражение ложно, то выполнение цикла
завершается,
{}
- тело цикла,
S
- операторы.
Иными
словами, операторы S, выполняются до тех пор, пока условие B не станет ложным.
while (i < 3)
{
alert(i);
i++;
}