Клиентские скрипты сценарии

Лекция посвящена способам реализации клиентской активности. Рассказывается о клиентских сценариях JavaScript и VBScript, а также о технологии,

Аннотация: Лекция посвящена способам реализации клиентской активности. Рассказывается о клиентских сценариях JavaScript и VBScript, а также о технологии, классах и платформе Java, инструментах создания Java-приложений. Дается понятие элементов управления ActivX, технология их создания и применения, а также встраивания в страницу.

При разработке динамических web-сайтов в большинстве случаев целесообразно разделять бизнес-логику между клиентом и сервером, чтобы добиться оптимальной производительности в условиях низкоскоростных каналов Интернета и лимитированных ресурсов Web-серверов.

Например, предварительную обработку введенных данных, отправляемых серверу, имеет смысл выполнять на стороне клиента. Это позволит исключить повторные передачи неправильно заполненных форм. Графическое представление результатов запроса также стоит выполнять на стороне клиента, что существенно сократит объем данных, передаваемых по сети.

Для реализации клиентской активности возможно применение сценариев JavaScript, VB Script, аплетов Java и элементов управления ActiveX.

Клиентские сценарии JavaScript

Понятие языка JavaScript

Язык программирования JavaScript предназначен для создания интерактивных HTML-документов. Это объектно-ориентированный язык разработки встраиваемых приложений, выполняющихся как на стороне клиента, так и на стороне сервера. Синтаксис языка похож на синтаксис языка Java — поэтому его часто называют Java-подобным. Клиентские приложения выполняются браузером просмотра Web-документов на машине пользователя, серверные приложения выполняются на сервере.

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

Конструкции языка сценариев JavaScript встраиваются в страницы HTML и исполняются (интерпретируются) под управлением браузера при загрузке страниц, а также при совершении пользователем определенных действий над объектами, расположенными в этих страницах.

Назначение клиентских сценариев JavaScript

Назначение клиентских сценариев JavaScript:

  1. Оперативная проверка достоверности заполняемых пользователем полей форм HTML до передачи их на сервер. Сценарии JavaScript способны обрабатывать данные, введенные пользователями в полях форм, а также события, возникающие в процессе манипуляций пользователя с мышью, копировать в окно браузера другие страницы HTML или изменять содержимое уже загруженных страниц.
  2. Создание динамических HTML-страниц совместно с каскадными таблицами стилей и объектной моделью документа.
  3. Взаимодействие с пользователем при решении «локальных» задач, решаемых приложением JavaScript, встроенном в HTML-страницу. В частности, сценарии JavaScript широко применяются для создания различных визуальных эффектов. Например, изменение внешнего вида элементов управления, над которыми установлен курсор мыши, анимация графических изображений, создание звуковых эффектов и т. д. Механизм локальной памяти Cookie позволяет сценариям JavaScript сохранять на компьютере локальную информацию, введенную пользователем. Например, в Cookie может храниться список товаров из Интернет-магазина, отобранных для покупки.

Приложение JavaScript представляет набор операторов языка, последовательно обрабатываемых встроенным в браузер интерпретатором.

Способы включения сценариев JavaScript в HTML-страницу

Встроить сценарий JavaScript в HTML-страницу можно несколькими способами:

  1. Задать операторы языка внутри тэга-контейнера <script>…</script> языка HTML. Браузеры, не поддерживающие какие-либо тэги HTML, их игнорируют, анализируя содержимое пропускаемых тэгов с точки зрения синтаксиса HTML. Это может приводить к ошибкам при отображении страницы. Поэтому операторы языка JavaScript помещаются в контейнер комментария <!— … —>:
    <script type="text/javascript" language="javascript">
    <!--
    операторы JavaScript
    //-->
    </script>

    Символы ( // ) перед закрывающим тэгом комментария —> являются оператором комментария JavaScript. Он необходим для правильной работы интерпретатора. Документ может содержать несколько тэгов <script>, расположенных в любом месте документа. Все они последовательно обрабатываются интерпретатором JavaScript по мере отображения частей документа в окне браузера. Поэтому рекомендуется размещать сценарии с глобальными функциями и переменными в разделе <head> документа. В этом случае все определения обрабатываются интерпретатором в начале загрузки документа и хранятся в памяти с первых моментов отображения документа в окне браузера.

  2. Указать файл с кодом JavaScript в параметре src тэга <script>. В качестве значения параметра задается полный или относительный URL-адрес внешнего файла, содержащего программный код на языке JavaScript. Задание закрывающего тэга </script> обязательно, независимо от того, заданы или нет операторы внутри тэга. Связываемый внешний файл не должен содержать тэгов HTML и должен иметь расширение .js:
    <script type="text/javascript" language="javascript" 
     src="http:www.mysite.ru/functions/jsfuncs.js">
    операторы JavaScript
    </script>
  3. Использовать выражения JavaScript в качестве значений параметров тэгов HTML. Эта процедура аналогична процедуре встраивания числовых или символьных примитивов HTML. Элементы JavaScript также располагаются между амперсандом ( & ) и точкой с запятой ( ; ), но должны заключаться в фигурные скобки { } и использоваться только в качестве значений параметров тэгов HTML. Нельзя использовать элементы JavaScript в тексте HTML. Они интерпретируются только тогда, когда расположены справа от параметра и задают его значение. Пусть определена переменная barwidth, и ей присвоено значение 75. Следующий тэг нарисует горизонтальную линию длиной в 75% от горизонтального размера окна браузера:
    <hr width="&{barWidth};%"/>
  4. Определить обработчик событий в тэге HTML. Для совместимости с языками сценариев в некоторые тэги HTML были введены специальные параметры обработки возникающих событий. Значениями этих параметров могут быть операторы языка JavaScript. Обычно в качестве значения задается имя функции, которая вызывается, когда происходит соответствующее событие, определяемое параметром обработки события. Имя параметра начинается с приставки on, за которым следует имя самого события. Например, параметр обработки события click будет иметь имя onClick. События в основном связаны с действиями, производимыми пользователем с элементами форм HTML. Поэтому чаще всего перехват и обработка событий задается в параметрах элементов форм, что позволяет проверить введенную информацию перед ее отправкой на обработку. Функция или процедура это именованная последовательность операторов, которая выполняет определенную задачу и может возвращать некоторое значение. Функция в JavaScript определяется оператором function, имеющем следующий синтаксис:
    function имя_функции ( [параметры] ) {
    [операторы JavaScript]
    [return значение]
    }

Параметры, передаваемые функции, разделяются запятыми. Необязательный оператор return в теле функции (блок операторов, заключенный в фигурные скобки), определяет возвращаемое функцией значение. Определение необходимых функций следует осуществлять в тэге <head>, так как все определенные в нем операторы сценария интерпретируются до отображения страницы, и, таким образом, будут известны в процессе отображения всей страницы.

Пример задания функции и ее вызова в процессе формирования документа:

<head>
 <title>Demo</title>
 <script type="text/javascript" language="javascript">
  <!-- //Скрыть сценарий от браузеров: не поддерживающих JavaScript
   function square(number) {
    return number * number;}
  //-->
 </script>
</head>
<body>
 <p>Начинается отображение страницы, в которую внедрен сценарий вычисления функции</p>
 <script type="text/javascript" language="javascript">
  <!-document.write("Значение, которое вычислялось, равно ", square(5), ".");
  //-->
 </script>
 <p> Теперь формирование страницы закончено.</p>
</body>

Пример явного вызова функции из сценария:

<head>
 <title>Demo</title>
  <script type="text/javascript" language="javascript">
   <!-- //Скрыть сценарий от браузеров: не поддерживающих JavaScript
    function validate(form) {
     if(form.value >=18) 
      {alert("Вы - совершеннолетний");
      }
    else {
     alert ("Вы - несовершеннолетний");
     }
    }
   //-->
  </script>
 </head>
<body>
 <form name="form_l" action="HTMLPage.htm">
  Ваш возраст: <input type="text" size="5" name="age" /> <hr/>
  <input type="button" value="Подтвердите" onclick="validate(this.form.age)"/>
 </form>
</body>

В этом примере обработчик события onclick кнопки формы связан с вызовом функции validate, которой передается значение, введенное в текстовое поле age. Имя поля задается параметром name. При нажатии на кнопку вызывается функция validate, отображающая сообщение в зависимости от введенного значения.

Параметр name элемента формы задает символическое имя элемента, которое можно использовать в операторах сценария для ссылки на соответствующий элемент. Передаваемый функции параметр this.form.age использует синтаксис объектно-ориентированных языков, обозначающий элемент с именем age (текстовое поле) формы. Ключевое слово this языка JavaScript означает в данном случае ссылку на текущую форму.

Браузер MSIE реализует собственную версию JavaScript, называемую JScript. Кроме того, для выполнения многих функций клиентские сценарии обращаются к интерфейсу объектной модели браузера. Эта модель отличается для разных браузеров.

Одним
из основных недостатков языка HTML
является пассивность и статичность
документов на этом языке, то есть
невозможность алгоритмического
построения содержимого документа в
соответствии с программой, реализующей
алгоритм, или в зависимости от действий
пользователя, просматривающего документ.
Для преодоления этих недостатков в
язык HTML
введена поддержка сценариев – программ,
загружаемых с сервера вместе с документом
HTML
и выполняемых навигатором при просмотре
этого документа. Существует несколько
языков, на которых может быть написан
сценарий. Наибольшей популярностью
пользуется язык JavaScript
компании Netscape,
первой реализовавшей поддержку сценариев
стороны клиента в своем браузере.

Поскольку
программа-сценарий выполняется
пользовательским агентом на машине
клиента, то данную технологию следует
отнести к технологиям стороны клиента.

JavaScript,
как и другие языки для встраивания
сценариев в HTML-документы, имеет
программный интерфейс для доступа
навигатору. Навигатор, как правило,
имеет панель инструментов, строку ввода
адреса, рабочую область и строку
состояния. Панель инструментов, как
минимум, содержит кнопки
«Back», «Forward», «Stop», «Reload»
и «Home».
Используя язык JavaScript, можно управлять
содержимым рабочей области и строки
состояния, а также открывать новые окна
навигатора, возможно, без панели
инструментов и строки ввода адреса.
Кроме того, можно вызывать простейшие
диалоговые панели с кнопками и полями
ввода.

Для
доступа к компонентам в языке JavaScript
используются объекты. Под объектом
понимается некоторая программная
абстракция, в которой инкапсулированы
свойства (данные) и методы (код) некоторого
реального объекта. В языке JavaScript
между объектами не устанавливается
отношения наследования. Таким образом,
JavaScript не является объектно-ориентированным
языком.

С
понятием объекта связано понятие
класса. Каждый объект принадлежит
определенному классу. Например, каждый
объект «окно» принадлежит классу
«окно» (window).
Можно сказать, что каждое конкретное
окно является переменной типа window
или экземпляром класса window.
С этой точки зрения, понятие класса
близко к понятию типа.

В
языке JavaScript
имеется возможность создавать собственные
новые классы, однако данная возможность
используется редко из-за малой гибкости
(по сравнению с объектно-ориентированными
языками) при создании интерфейса нового
класса. Можно определить JavaScript как язык
для доступа к некоторой объектной
библиотеке.

С
точки зрения лексики и синтаксиса, язык
JavaScript
похож на языки C++
и Java.

Рассмотрим
следующие элементы языка JavaScript:

типы;

операции;

операторы;

встроенные
функции;

объекты
и классы.

Типы
языка JavaScript, не соответствующие никаким
классам, – числовой и логический, будем
условно называть number и bool. Значения
типа number – целые и вещественные числа.
Значения типа bool соответствуют числовым
значениям 0 и 1. Константы языка JavaScript
могут быть числовыми и строковыми.
Последние имеют тип, соответствующий
классу string. Значения остальных типов
(bool и других классов) не представляются
в виде констант, но могут возвращаться
функциями и методами. Следует еще раз
отметить, что слов number и bool в JavaScript не
существует. Это условное обозначение
для указания типов свойств, параметров
и возвращаемых значений функций и
методов.

В
JavaScript имеется ряд операций аналогичных
операциям языка C: ‘+’, ‘–’, ‘*’, ‘/’, ‘%’, ‘<<‘,
‘>>’, ‘+=’, ‘–=’. Операция ‘+’ для строк
перегружена и означает конкатенацию.

Основные
операторы JavaScript перечислены в табл. 5.

Таблица
5

Операторы
языка JavaScript

Оператор

Описание

var
name = value

Объявление
переменной name
и присвоение ей значения value

if
(cond) {…}

else
{…}

Оператор
условия

while
(cond) {…}

Цикл
с предусловием

for
(init; cond; modif)

{…}

Цикл
с параметром. Перед выполнением цикла
осуществляется инициализация init.
Перед каждой итерацией цикла
проверяется условие cond.
После каждой итерации производится
модификация параметра цикла modif.

for
(prop in
obj) {…}

Цикл
свойств объекта obj

break

Оператор
прерывания цикла

continue

Оператор
продолжения цикла

function
name(par) {…}

Определение
функции

Встроенные
функции JavaScript перечислены в табл. 6.

Таблица
6

Встроенные
функции JavaScript

Функция

Описание

string
escape(string)

Перевод
строки в escape-последовательность

string
unescape(string)

Перевод
escape-последовательности в строку

number

parseFloat(string
value)

Перевод
строки в вещественное число

number

parseInt(

string
value,

[number
radix]

)

Перевод
строки в целое число в заданной
системе счисления

Bool
isNaN(number)

Проверка
на «не число» (Not-a-Number). Не числом
является, например, бесконечность,
получающаяся при делении на 0.

string
eval(string)

Выполнить
строку

Здесь
и далее для объявления функций, свойств
и методов применен C-подобный стиль:
тип возвращаемого значения, идентификатор
(название), список параметров в круглых
скобках. Необязательные параметры
перечислены в квадратных скобках. В
качестве типа указывается имя класса
или одно из слов number или bool.

Объекты
JavaScript
описывают интерфейс доступа к документу
в навигаторе и инкапсулируют его
свойства и методы.

В
табл. 7 приведены свойства и методы
основных классов JavaScript.

Таблица
7

Классы
JavaScript

Свойства
и методы

Описание

string:
Строка (с информацией о выводе на
экран)

number
length

Длина
строки

string
big()

Большой
шрифт

string
small()

Маленький
шрифт

string
bold()

Полужирный
шрифт

string
italics()

Наклонный
шрифт

string
strike()

Перечеркнутый

string
fixed()

Моноширинный
шрифт

string
sub()

Нижний
индекс

string
sup()

Верхний
индекс

string
blink()

Мигающая
строка

string
toLowerCase()

Строчные
буквы

string
toUpperCase()

Заглавные
буквы

string
fontsize(number size)

Установить
размер символов

string
fontcolor(string color)

Установить
цвет символов

string
anchor(string name)

Превращает
строку в «якорь» name

string
link(string href)

Превращает
строку в гиперссылку href

string
charAt(number i)

i-й
символ строки

number
indexOf(string what, [number from])

Позиция
подстроки what, начиная с позиции from

number
lastIndexOf(string what, [number from])

Позиция
подстроки what
при просмотре в обратном порядке,
начиная с from

string
substring(number begin, number end)

Подстрока

window:
Окно

string
name

Название
окна

string
defaultStatus

Содержимое
строки состояния по умолчанию

string
status

Строка
состояния

number
length

Число
фреймов в окне

frame[]
frames

Массив
фреймов

Продолжение
табл. 7

Свойства
и методы

Описание

window
self

Ссылка
на себя

window
window

Ссылка
на себя

window
parent

Родительское
окно

window
top

Ссылка
на верхнее окно в иерархии

document
document

Документ

frame
frame

Фрейм

location
location

Местоположение
отображаемого содержимого

window
open(string URL, string Name, string features)

Открыть
новое окно. Параметр features представляет
собой список параметров и значений,
перечисленных через запятую. Название
параметра и значение разделяются
символом «=». Возможны
следующие
параметры:
toolbar,
location, directories, status, menubar, scrollbars, resizeable,
width, height.
Все
параметры, кроме width и height принимают
логические значения (yes, no, 1 или 0).
Параметры width и height принимают
целочисленные значения.

close()

Закрыть
окно

timeout
setTimeout(string expr, number msec)

Установить
таймаут

clearTimeout(timeout
t)

Удалить
таймаут

alert(string
message)

Диалоговая
панель с сообщением message и кнопкой
Ok

bool
confirm(string message)

Диалоговая
панель с сообщением message и кнопками
Ok и Cancel

string
prompt(string message, string default)

Диалоговая
панель с сообщением и полем ввода

frame:
Фрейм

string
name

Название

number
length

Число
внутренних фреймов

frame[]
frames

Набор
фреймов внутри данного

frame
self

Ссылка
на себя

frame
window

Ссылка
на себя

frame
parent

Ссылка
на родительский фрейм

window
parent

Ссылка
на родительское окно

timeout
setTimeout(string expr, number msec)

Установить
таймаут

clearTimeout

(timeout
t)

Удалить
таймаут

Продолжение
табл. 7

Свойства
и методы

Описание

location:
Идентификатор ресурса

string
hash

Поле
fragment в
URI

string
host

Поля
host и
port в
URI

string
hostname

Поле
host в
URI

string
href

URI

string
pathname

Поле
path в
URI

number
port

Поле
port в
URI

string
protocol

Поле
protocol в
URI

string
search

Параметры
в URI
для программы CGI

document:
Документ (содержимое окна)

string
title

Заголовок

string
URL

URI

Date
lastModified

Дата
и время последней модификации
документа

string
fgColor

Цвет
переднего плана

string
bgColor

Цвет
фона

string
linkColor

Цвет
ссылки

string
alinkColor

Цвет
ссылки во время перехода

string
vlinkColor

Цвет
посещенной ранее ссылки

anchor
anchor

Якорь

link
link

Ссылка

history
history

Набор
ссылок

form
form

Форма

anchor[]
anchors

Массив
«якорей»

link[]
links

Массив
ссылок

form[]
forms

Массив
форм

string
referrer

URI
документа, из которого вызван текущий

open([string
mime])

Начать
вывод содержимого документа

close()

Завершить
вывод содержимого документа

write(…)

Вывести
в качестве содержимого документа

writeln(…)

Вывести
в качестве содержимого документа и
перевести строку

history:
Набор
ссылок

number
length

Число
ссылок в памяти

back()

Вернуться
на предыдущую страницу

forward()

Загрузить
следующую страницу

go(number
delta)

Перейти

go(string
location)

Перейти

static
Math:
Математические константы и функции

number
E

E

Продолжение
табл. 7

Свойства
и методы

Описание

number
LN2

ln(2)

number
LN10

ln(10)

number
LOG2E

log2(e)

number
LOG10E

log10(e)

number
PI

number
SQRT1_2

1/sqrt(2)

number
SQRT2

sqrt(2)

number
abs(number a)

Абсолютное
значение

number
acos(number a)

Арккосинус

number
asin(number a)

Арксинус

number
atan(number a)

Арктангенс

number
ceil(number a)

Наименьшее
целое, не меньшее a

number
cos(number a)

Косинус

number
exp(number a)

Экспонента

number
floor(number a)

Наибольшее
целое, не большее a

number
log(number a)

Натуральный
логарифм

number
max(number a, number b)

Максимум

number
min(number a, number b)

Минимум

number
pow(number a, number b)

ab

number
random()

Случайное
число от 0 до 1

number
sin(number a)

Синус

number
sqrt(number a)

Квадратный
корень

number
tan(number a)

Тангенс

Date:
Дата и время

Date()

Инициализация
объекта текущей датой и временем

static
number UTC(number year, number month, number day [[[, number
hrs], number min], number sec])

Возвращает
число миллисекунд, прошедших от
Epoche
(01.01.1970 00:00:00 GMT)
до даты, указанной в качестве параметра

static
number parse(string time)

Возвращает
число миллисекунд, прошедших от
01.01.1970 00:00:00 по местному времени до
даты, указанной в качестве параметра

number
getDate()

Число

number
getDay()

День
недели

number
getHours()

Часы

number
getMinutes()

Минуты

number
getMonth()

Месяц

number
getSeconds()

Секунды

number
getTime()

Число
миллисекунд с Epoche

number
getTimeZoneOffset()

Смещение
временной зоны

Окончание
табл. 7

Свойства
и методы

Описание

number
getYear()

Год,
начиная с 1900

setDate(number
Date)

Установка
даты

setHours(number
Hours)

Установка
часов

setMinutes(number
Minutes)

Установка
минут

setMonth(number
Month)

Установка
месяца

setSeconds(number
Seconds)

Установка
секунд

setTime(number
Time)

Установка
времени в миллисекундах, прошедших
с Epoche

setYear(number
Year)

Установка
года

string
toGMTString()

Преобразование
к строке с датой и временем по Гринвичу

string
toLocaleString()

Преобразование
к строке с местными датой и временем

Array:
Массив

Array()

Пустой
массив

Array(number
size)

Массив
с size
элементами

Array(a0,
a1, …)

Массив
с элементами,

инициализированными
a0,
a1,

number
length

Число
элементов массива

string
join()

Объединение
элементов массива в строку

reverse()

Изменение
порядка элементов массива на обратный

sort()

Сортировка
элементов в массиве

Image:
Изображение

Image()

Пустое
изображение

Image(number
w, number h)

Пустое
изображение с заданными размерами

string
src

URI
ресурса, содержащего изображение

В
объектно-ориентированном анализе при
проектировании и описании объектных
библиотек чаще всего рассматриваются
иерархии двух видов: иерархия классов
(иерархия «is-a»)
и иерархия объектов (иерархия «part-of»).
В иерархии классов отображаются
отношения наследования между классами.
Поскольку в JavaScript
не существует наследования, то нет и
иерархии данного типа. В иерархии
объектов отображаются отношения
агрегации (то есть отношения целого и
части) между классами и объектами. На
рис. 1 приведена иерархия объектов
JavaScript.

Для
доступа к свойствам и методам объекта
применяется операция «.»:

<объект>.<свойство>

<объект>.<метод>(<параметры>)

Некоторые
свойства и методы класса могут быть
статическими. Такие свойства относятся
не к конкретному объекту, а к классу в
целом. Можно получить доступ к этим
свойствам и методам, даже не имея доступа
ни к одному из объектов класса. В этом
случае операция «.» применяется
не к объекту, а к классу:

<класс>.<свойство>

<класс>.<метод>(<параметры>)

Класс,
в котором все свойства и методы являются
статическими, называется статическим.
Статические свойства, методы и классы
в табл. 7 приведены со словом «static»
перед идентификатором.

Методы
некоторых классов могут иметь то же
имя, что и класс. Такие методы называются
конструкторами и используются для
создания динамических объектов при
помощи операции new,
единственным аргументом которой
является конструктор с параметрами.

Массивы
в языке JavaScript
являются объектами некоторого
предопределенного класса Array.
В отличие от C
и C++
массивы в JavaScript
являются динамическими, то есть размер
массива автоматически увеличивается
при присваивании значения не существующему
элементу массива. Индексы массива
нумеруются с нуля. Для доступа к элементам
массива используются квадратные скобки.
Так же как и обычные переменные, элементы
массива не имеют типа. Тип имеют значения
элементов. В различных элементах массива
могут храниться значения различных
типов.

В
языке JavaScript
имеется возможность определять
собственные функции. Определение
функции в JavaScript
имеет следующий вид:

function
<идентификатор>(<параметры>) { …
}

Идентификатор
функции – это имя, по которому функция
будет вызываться в сценариях JavaScript.
Параметры указываются без типов и
разделяются символом «,».
Пользовательские функции в JavaScript
не могут возвращать значения, в отличие
от встроенных функций.

Для
размещения сценариев JavaScript
внутри документов HTML
используется элемент SCRIPT:

<SCRIPT
language=l src=s defer></SCRIPT>

Начальный
и конечный тэги обязательны. Атрибут
language
указывает язык, на котором написан
сценарий. Для сценариев на языке
JavaScript
этот атрибут должен принимать значение
«JavaScript».
В атрибуте src
указывается URI
файла со сценарием. Атрибут defer
указывается, если сценарий не осуществляет
вывод на экран при помощи методов write
и writeln
объекта document
для ускорения формирования содержимого
страницы.

Соседние файлы в предмете Программирование для Web

  • #
  • #
  • #
  • #

Иерархия объектов

В первом цикле «Изучаем JavaScript» мы рассмотрели важнейшие понятия и синтаксис языка JavaScript. Научились создавать простейшие сценарии. Узнали, что такое объекты, какими свойствами и методами они обладают. Что такое переменные, функции и массивы и еще много чего полезного для создания динамичных веб-страниц. А теперь пришло время познакомиться с клиентскими сценариями JavaScript.

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

Объекты, управляемые сценариями JavaScript

Сценариями JavaScript называются программы, работающие с объектами HTML-документа. Параметры элеменов документа, заданные с помощью атрибутов соответствующих тегов и таблиц стилей, можно изменить или даже заменить весь загруженный HTML-документ на другой. Сделать это можно с помощью сценариев JavaScript и представляющими их объектами.

Окну браузера соответствует объект window, а HTML-документу, загруженному в окно – объект document. Эти объекты содержат в своем составе другие объекты. Объект document входит в состав объекта window. Элементам HTML-документа соответствуют объекты, которые входят в состав объекта document. Все множество объектов имеет иерархическую структуру, называемою объектной моделью. Объект представляет собой контейнер для хранения информации. Он характеризуется свойствами, методами и событиями, на которые может реагировать.

Доступ к свойствам и методам объекта осуществляется с помощью выражений вида:

объект.свойство

объект.метод()

Объекты могут находится в отношении вложенности(подчиненности). Объект, содержащий в себе другой объект, называют родительским. Объект, который содержится в каком-нибудь объекте, называют дочерним по отношению к нему. Таким образом устанавливается иерархия. Чтобы указать конкретный объект, требуется перечислить все содержащие его объекты, начиная с объекта самого верхнего иерархического уровня, подобно тому, как указывается полный путь к файлу на диске:

объект1.объект2. ... .объектN

Если объект входит в состав другого объекта(является подобъектом другого), то для доступа к его свойствам и методам используется следующий синтаксис:

объект1.объект2. ... .объектN.свойство

объект1.объект2. ... .объектN.метод()

Нередко подобъект некоторого объекта называют его свойством (сложным свойством). В этом случае можно говорить, что свойства объектов бывают трех типов:

  • просто свойства(простые свойства);
  • методы(свойства-функции);
  • объекты(сложные свойства, имеющие свои свойства).

Поскольку объект document является подобъектом объекта window, то ссылка на HTML-документ, загруженный в текущее(активное) окно браузера, будет выглядеть следующим образом:

window.document

Объект document имеет метод write(строка), позволяющий записать в текущий HTML-документ строку, содержащую просто текст или теги HTML. Чтобы применить этод метод, следует написать:

window.document.write(строка)

Как уже отмечалось выше, при загрузке HTML-документа в браузере, создается объектная модель этого документа. Прежде всего, создается объект окна window, который является вершиной всей структуры. Это корневой объект, имеющий свои подобъекты, такие как location для хранения информации об URL-адресе загруженного документа и screen для хранения данных о возможностях экрана монитора пользователя. Затем создается объект document, являющейся подобъектом window. Далее формируются объекты, представляющие отдельные элементы HTML-документа, такие как объекты графических изображений, форм и их элементов(поля ввода, переключатели, кнопки) и др.

Иерархия объектов

На нижнем рисунке показано, как усложняется структура объектного представления документа с добавление новых тегов. Это упрощенные схемы, дающие самые общие представления об объектной моделе. Эти сведения играют роль путеводителя в обширном множестве объектов документа и окна браузера.

Иерархия объектов

В объектной модели документа объекты сгруппированы в так называемые коллекции. Коллекцию можно рассматривать как промежуточный объект, предназначенный для группировки объектов документа. С другой стороны, коллекция является массивом объектов, отсортированных в порядке упоминания соответствующих им элементов в HTML-документе. Индексация объектов в коллекции начинается с нуля. Синтаксис обращения к элементам коллекции такой же, как к элементам массива. Коллекция также имеет свойство length – количество всех ее элементов. Коллекция всех графических изображений в документе называется images, коллекция всех форм – forms, коллекция всех ссылок – links. Это примеры частных или тематических коллекций. Кроме них имеется коллекция всех объектов документа, которая называется all.

При этом индексы данного объекта в частной коллекции и коллекции all могут быть различными.

Рассмотрим способы обращения к свойствам объектов документа. Общее правило заключается в том, что в ссылке должно быть упомянуто название коллекции. Исключением из этого правила является объект формы. Далее, если речь идет о документе, загруженном в текущее окно, то объект window можно не упоминать, а сразу начинать с ключевого слова document. Возможны несколько способов обращения к объектам документа:

document.коллекция.id_объекта

document.коллекция["id_объекта"]

document.коллекция[индекс_объекта]

Здесь id_объекта – значение атрибута ID в теге, который определяет соответствующий элемент в HTML-документе. Величина индекс_объекта – целое число, указывающее порядковый номер объекта в коллекции. Первый объект в коллекции имеет индекс 0. Если при создании HTML-документа вы не использовали атрибут ID для некоторых элементов, то для обращения к их объектам остается только взять их индексы.

Заметим, что некоторые теги(<form>, <input>) имеют атрибут name. Значение этого атрибута можно использовать при обращении к объекту наравне со значением атрибута ID.

К объекту формы, кроме описанных выше способов, можно обращаться по значению атрибута name (имя формы), если он указан в теге <form>, но не по значению атрибута ID:

document. имя_формы

Как известно, тег формы <form> является контейнерным и может содержать в себе теги других элементов, таких как <input>, <button> и другие. Обращение к элементам формы возможно через коллекцию all. Однако имеется и специфический для них способ:

document. имя_формы.elements[индекс_элемента]

document. имя_формы.elements[id_элемента]

document. имя_формы.id_элемента

Здесь индекс_элемента – порядковый номер элемента формы, а не порядковый номер в коллекции всех элементов; первый элемент имеет индекс 0. Для Internet Explorer вместо квадратных скобок допустимо использование и круглых скобок.

Нужно отметитить, что универсальным способом обращения к объектам документа является обращение посредством коллекции all. Однако, если не позаботится об атрибуте ID в тегах элементов HTML-документа, которые должны стать предметами работы сценариев, то обращение к объектам через all посредством индексов становится проблематичным. Чтобы убедится в этом рассмотрим пример.

Напишем HTML-документ и вставим в конце документа простой сценарий основанный на использовании тега tadName, возвращающий название тега, с помощью которого был создан соответствующий объект.

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>Клиентские сценарии JavaScript</title>

<script language="JavaScript">

function mystrim(){

msg=""

for (i=0; i<document.all.length;i++){

msg +=i+" "+document.all[i].tagName +"n"

}

alert(msg)
}

</script>

</head>

<body>

<h2>Моя веб

-страница</h2>

<a href="../../../index.php"><img src="../images/dom4.gif" >Сайт о сайтах</a><br>

<form action="" method="get">

<p>

<input name="" type="text" size="40">

</p>

<p>

<input name="" type="button" onClick="mystrim()" value="старт">

Жми здесь

</p>

</form>

</body>

</html>

В окне веб-браузера это будет выглядеть ТАК.

В диалоговом окне, выведенном с помощью метода alert(), перечислены теги документа. Их порядковые имена соответствуют индексам в коллекции all.

диалоговое окно

Объекту document.all[8] соответствует элемент HTML-документа, созданный тегом <img> и т.д. Если бы в данном HTML-документе отсутствовали теги <head>, <title>, <body>, то они в любом случае присутствовали в коллекции all. Можете проверить.

Теперь рассмотрим тот же пример, но добавим к основным тегам атрибуты ID, с помощью которых можно персонифицировать соответствующие объекты. Чтобы получить значение атрибута ID, необходимо воспользоваться свойством id соответствующего объекта.

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>Клиентские сценарии JavaScript</title>

<script language="JavaScript">

function mystrim(){

msg=""

for (i=0; i<document.all.length;i++){

msg +=i+" "+document.all[i].tagName +" id="+document.all[i].id+"n"

}

alert(msg)
}

</script>

</head>

<body>

<h2>Моя веб-страница</h2>

<a href="../../../index.php"><img src="../images/dom4.gif" width="157" height="144" border="0" id="myimg">Сайт о сайтах</a><br>

<br>

<form action=

"" method="get" id="myform">

<p>

<input name="" type="text" size="40" id="myinput">

</p>

<p>

<input name="" type="button" onClick="mystrim()" value="старт" id="mybutton">

Жми здесь

</p>

</form>

</head>

<body>

</body>

</html>

В окне веб-браузера это будет выглядеть ТАК.

диалоговое окно

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

tags(название_тега)

В следующем примере выделяется подмножество всех заголовков 2-го уровня, созданных с помощью тегов <h2>, и для каждого их них устанавливается синий цвет:

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>Клиентские сценарии JavaScript</title>

<script language="JavaScript">

function mystrim(){

msg=""

for (i=0; i<document.all.length;i++){

msg +=i+" "+document.all[i].tagName +" id="+document.all[i].id+a+"n"

}

alert(msg)

}

</script>

</head>

<body >

<h2>Моя веб

-страница</h2>

<a href="../../index.php"><img src="../images/dom4.gif" width="157" height="144" border="0" id="myimg">Сайт о сайтах</a><br>

<br>

<form action=

"" method="get" id="myform">

<p>

<input name="" type="text" size="40" id="myinput">

</p>

<p>

<input name="" type="button" onClick="mystrim()" value="старт" id="mybutton">

Жми здесь

</p>

</form>

<script language=

"JavaScript">

var a=document.all.tags("h2")

for (i=0;i<a.length;i++)

a(i).style.color="blue"

</script>

</body>

</html>

В окне веб-браузера это будет выглядеть ТАК.

Универсальный способ обращения к объекту документа базируется на использовании коллекции all. Кроме него существует еще способ, основанный на методе getElementDyId():

document.getElementDyId()(значение_ID)

Метод document.getElementDyId()(значение_ID) позволяет обратиться к любому элементу по значению его идентификатора – значению атрибута ID. Если несколько элементов документа имеют одинаковый ID, метод возвращает первый элемент с указанным значением ID. Отсюда становится очевидным, важность присвоения различным элементам, уникальных значений ID.

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

В приведенном выше примере элемент изображения, созданный с помощью тега <img src="images/dom4.gif" width="157" height="144" border="0" id="myimg">, имеет атрибуты ID и SRC. Этим атрибутам соответствуют свойства id и src объекта данной картинки.

Рассмотрим различные варианты обращения к данным свойствам.

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>Клиентские сценарии JavaScript</title>

<script language="JavaScript">

function mystrim(){

msg=""

for (i=0; i<document.all.length;i++){

msg +=i+" "+document.all[i].tagName +" id="+document.all[i].id+"n"

}

alert(msg)

}

</script>

</head>

<body >

<h2>Моя веб

-страница</h2>

<a href="../../index.php"><img src="../images/dom4.gif" width="157" height="144" border="0" id="myimg">Сайт о сайтах</a><br>

<br>

<form action=

"" method="get" id="myform">

<p>

<input name="" type="text" size="40" id="myinput">

</p>

<p>

<input name="" type="button" onClick="mystrim()" value="старт" id="mybutton">

Жми здесь

</p>

</form>

<script language=

"JavaScript">

var a=document.all.tags("h2")

for (i=0;i<a.length;i++)

a(i).style.color="blue"

a1=document.

images(0).id //myimg

a2=document.

images("myimg").id //myimg

a3=document.all("myimg").id //myimg

a4=document.all.myimg.id

//myimg

a5=document.all.myimg //[object]

a5.id

//myimg

a6=document.

images(0).src //file:///D:/sevidi/images/dom4.gif

a7=document.

images("myimg").src //file:///D:/sevidi/images/dom4.gif

a8=document.all("myimg").src //file:///D:/sevidi/images/dom4.gif

a9=document.all.myimg.src //file:///D:/sevidi/images/dom4.gif

a10=document.all.myimg //[object]

a10.src //file:///D:/sevidi/images/dom4.gif

document.

write(a1+"<br>"+a2+"<br>"+a3+"<br>"+a4+"<br>"+a5+"<br>"+a5.id+"<br>"+a6+"<br>")

document.write(a7+"<br>"+a8+"<br>"+a9+"<br>"+a10+"<br>"+a10.src)

</script>

</body>

</html>

В окне веб-браузера это будет выглядеть ТАК.

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

Понравилась статья? Поделить с друзьями:
  • Кливлендский праздник воздушных шаров 1986
  • Кливлендский праздник воздушных шариков
  • Клементьев день праздник
  • Книга сценарии конфликтов
  • Книга сценариев наследие данвича