При подготовке статьи были использованы материалы Интернет-Университета Информационных Технологий http://www.intuit.ru/, курс Введение в JavaScript, справочник Клиентский JavaScript.

Другие материалы и статьи

Краткий курс JavaScript

История развития JavaScript

В 1995 году в компании NetScape был разработан язык программирования JavaScript для управления HTML страницами на клиентской стороне. Основная идея JavaScript состоит в возможности изменения значений атрибутов HTML-контейнеров и свойств среды отображения в процессе просмотра HTML-страницы пользователем. При этом перезагрузки страницы не происходит.
Существует совместимая с JavaScript реализация языка программирования Jscript от Microsoft. Jscript расширенная версия языка JavaScript. Таким образом JavaScript является подмножеством языка Jscript.
JavaScript стандартизован ECMA (European Computer Manufacturers Association - Ассоциация европейских производителей компьютеров). Соответствующие стандарты носят названия ECMA-262 и ISO-16262. Этими стандартами определяется язык ECMAScript.

Объектная модель JavaScript

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

Объектами в JavaScript также является окно браузера и объект Navigator.
Объекты с одинаковым набором свойств, методов и событий объединяются в классы.
Программист может изменять значения свойств объектов, применять методы объектов и управлять реакцией на события объектов.
Свойства HTML тегов заданы их атрибутами.
Методы JavaScript определяют функции изменения свойств объекта.
С HTML объектами могут происходить события (onLoad, onClick …). Программист JavaScript может изменить обработчик события, т.е. переписать программу обработки события для объекта.
Пример

<P> Подведи курсор к английскому слову

<FORM name=myform1>
        <INPUT type=text name=x1 value="Займемся английским" size=30>
</FORM>

<P onmouseout="document.myform1.x1.value=''">
        <I onmouseover="document.myform1.x1.value='мое'">My</I>
        <I onmouseover="document.myform1.x1.value='имя'">name</I>
        <I onmouseover="document.myform1.x1.value='есть'">is</I>
        <I onmouseover="document.myform1.x1.value='Андрей'">Andrey</I>
</P>

<CENTER>
        <A href="#" onclick="window.close(); return false;" class="allnews">Закрыть окно</А>
</CENTER>

В этом примере на HTML странице создан объект myform1 класса FORM. В myform1 создан объект x1 класса поле ввода типа text. Также созданы объекты (HTML-контейнеры) <P> и <I> с переопределенными обработчиками событий - onmouseout для <P> и onmouseover для <I>. По событию onmouseover объектов контейнеров <I> и onmouseout у <P> меняется значение свойства (атрибута) value объекта X1.
Переопределенное программистом событие onclick объекта (тега) <A> вызывает метод close() объекта window и закрывает окно браузера.

В JavaScript, как в объектно-ориентированном языке программирования существует иерархия классов. Для обращения к любому объекту или его свойству указывают полное или частичное имя этого объекта или свойства объекта, начиная с имени объекта старшего в иерархии, в который входит данный объект:



Способы размещения кода JavaScript на HTML странице


Исполняет JavaScript-код браузер. В него встроен интерпретатор JavaScript. Выполнение программы зависит от того, когда и как этот интерпретатор получает управление. Существует несколько способов применения JavaScript:

URL-схема JavaScript


На HTML страницах в атрибутах href, src и action некоторых тегов указывают URL интернет ресурса. Все URL подразделяются на схемы доступа, зависящие от протокола доступа к ресурсу. Кроме того, возможно использование в схеме URL - JavaScript кода.

Пример

<A href="JavaScript:alert('Форматировать диск C:?');">Очистить компьютер от вирусов?</A>

Перепрограммирование обработчиков событий


Пример

<CENTER>
<IMG src="example003/key1.jpg"
        onmouseover="this.src='example003/key2.jpg';"
        onmousedown="this.src='example003/key3.jpg';"
        onmouseout ="this.src='example003/key1.jpg';">
</CENTER>

Где key1.jpg это , key2.jpg это , key3.jpg это

Контейнер SCRIPT


Тег <SCRIPT>, применяемый на HTML странице для подключения JavaScript кода может быть использован двумя способами:

<SCRIPT type="text/javascript">
        Код программы
</SCRIPT>

<SCRIPT type="text/javascript" src="scripts/JavaScriptFile.js"></SCRIPT>

В первом случае код JavaScript программы помещается на HTML странице между открывающим и закрывающим тегами SCRIPT.
Во втором случае код JavaScript программы находится во внешнем текстовом файле, URL которого указан в атрибуте src тега SCRIPT.

Код JavaScript программы может объявлять функции, предназначенные для использования на HTML странице или представлять собой код, предназначенный для непосредственного выполнения браузером в процессе загрузки страницы.
Код, предназначенный для непосредственного выполнения браузером в процессе загрузки страницы обычно располагают в теле HTML документа (контейнер <BODY>), а объявления функций помещают в голову документа (контейнер <HEAD>)
Пример

<BODY>
<P>
Нижеследующий абзац на этой странице сгенерирован с помощью JavaScript программы в момент загрузки страницы.
<P>
<SCRIPT>
        d = new Date();
        document.write("<BR>");
        document.write("Момент загрузки страницы: "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds());
        document.write("<BR>");
</SCRIPT>
...
</BODY>

В процессе загрузки этой страницы HTML-парсер браузера, дойдя до тега <SCRIPT>, передаст управление JavaScript-интерпретатору. JavaScript-интерпретатор выполнит код программы, заключенный между тегами <SCRIPT>, и вернет управление HTML-парсеру для дальнейшего формирования страницы.
JavaScript-интерпретатор, выполняя этот фрагмент JavaScript кода, создаст объект d класса Date(). Методом write() допишет в текущий документ теги <BR>. При помощи методов getHours(), getMinutes, getSeconds() объекта d получит строки часы, минуты, секунды. Операторы + объединяют строки "Момент загрузки страницы: ", часы, ":", минуты, ":", секунды в одну строку, а JavaScript-интерпретатор методом write() допишет эту строку в текущий документ.

Пример

.......
<SCRIPT>
function myFunction()
{
        d = new Date();
        alert("Точное время: "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds());
}
</SCRIPT>

</HEAD>
<BODY>

<FORM>
        <INPUT type=button value="Получить текущее время" onClick="myFunction()">
</FORM>
.......

В процессе загрузки HTML странтицы в оперативной памяти компьютера будет создана функция myFunction(). Предназначение этой функции - вывести на экран окно предупреждения с текщим временем.
У кнопки, расположенной на нашей странице, перепрограммировано событие onClick. Щелчек мыши по кнопке вызовет на выполнение функцию myFunction(). Когда будет передано управление в функцию myFunction(), будет создан объект d класса Date(), и строка, содержащая текст "Точное время: чч:мм:сс". Будет вызвано окно предупреждения с тестом "Точное время: чч:мм:сс".

Управление окнами

К классу объектов Window относятся объект Window и объект Frame. Объект Window ассоциируется с окном программы-браузера, а объект Frame - с окнами внутри окна браузера. Объекты типа Window обладают свойствами status, location, history, navigator. Также к ним применимы методы open(), close(), focus(). Событий у объектов типа Window нет.

Поле статуса

Полем статуса (status bar) называют среднее поле нижней части окна браузера сразу под областью отображения HTML-страницы. В поле статуса отображается информация о состоянии браузера. Существует два состояния браузера и два свойства управляют выводом информации в поле статуса:

- window.defaultStatus - в браузере нет никаких событий;
- window.status - когда происходят какие-то события.

Пример


<BODY onLoad="window.defaultStatus='с браузером никаких событий не происходит';">

<A href=#status onMouseover="window.status='Мышь навели на ссылку';return true;">
        Наводите и убирайте курсор мыши на это сообщение
</A>

</BODY>


Пример

...........
<SCRIPT>
function time_scroll()
{
        d = new Date();
        window.status = d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
        setTimeout('time_scroll();',500);
}
</SCRIPT>
</HEAD>
<BODY onLoad="time_scroll();">

<H2 align=center>Часы в поле статуса</H2>

</BODY>

Поле location

В поле location отображается адрес (URL) загруженного документа.
Location - это объект. Поле Location является подклассом класса Window и класса URL. Объект location наследует свойства URL. Также к нему применимы методы reload() и replace(). Событий у объекта location нет.

Пример

<A name="zakladka"></A>

<H2 align=center>Свойства объекта location</H2>

<SCRIPT>
        document.write("<BIG>window.location.href = </BIG>"+window.location.href+"<BR>");
        document.write("<BIG>window.location.protocol = </BIG>"+window.location.protocol+"<BR>");
        document.write("<BIG>window.location.hostname = </BIG>"+window.location.hostname+"<BR>");
        document.write("<BIG>window.location.host = </BIG>"+window.location.host+"<BR>");
        document.write("<BIG>window.location.port = </BIG>"+window.location.port+"<BR>");
        document.write("<BIG>window.location.pathname = </BIG>"+window.location.pathname+"<BR>");
        document.write("<BIG>window.location.search = </BIG>"+window.location.search+"<BR>");
        document.write("<BIG>window.location.hash = </BIG>"+window.location.hash+"<BR>");
</SCRIPT>

Метод reload() используется только с двумя аргументами reload(true) или reload(false). Reload(true) выполняет действия, как при щечке мыши по кнопке "Обновить", а Reload(false) - "Shift+Обновить". В первом случае проверяется время последней модификации документа на сервере и страница обновляется если ее копия в кеш устарела. Во втором случае, страница обновляется не смотря ни на что.
Метод replace() загрузит страницу, URL которой является аргументом метода. Аналогичный результат можно достичь меняя свойства объекта location. Но, применение методов объекта location не помещает посещаемую страницу в history, а изменение свойств - помещает.

Пример


<P><U onMouseOver="this.style.cursor='hand';"
onclick="window.location.href='http://lightsnack.narod.ru/index.htm';">
        Это самодельная ссылка c использованием свойства window.location.href на "Поваренную книгу"</U></P>

<P><U onMouseOver="this.style.cursor='horse.ani';"
onclick="window.location.replace('http://lightsnack.narod.ru/index.htm');">
        Это самодельная ссылка c использованием метода replace() на "Поваренную книгу"</U></P>

Где horse.ani - это изображение курсора

Обратите внимание - в первом случае, кнопка браузера "Назад" работает, а вовтором - нет.

Гипертекстовые ссылки - объекты Link

Встроенные в HTML документ гипертекстовые ссылки составляют массив гипертекстовых ссылок документа (массив Links[n] объектов Link). Объекты Link могут быть созданы HTML тегами A или AREA или вызовом метода String.link. На JavaScript к объекту Link можно обратиться по индексу в этом массиве.

Показать гипертекстовые ссылки этого документа

<A href="JavaScript:myWin=window.open('','example','menubar=no,scrollbars=yes,resizable=yes,width=1000');
for(i=0;i<document.links.length;i++) myWin.document.write(document.links[i].href+'<BR>');
myWin.document.close();">
Показать гипертекстовые ссылки этого документа
</A>

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

История посещений (History)

Содержит массив информации о URL, которые были посещены пользователем в данном окне.
History обладает свойствами current - текущий URL, length - количество в списке, next - следующий, previous - предыдущий URL в списке. Программный доступ к значениям URL history из соображений безопастности запрещен.
К history применимы методы back(), forward(), go().

Пример


<FORM>
<INPUT type=button value="Назад" onclick="window.history.back();">
<INPUT type=button value="Вперед" onclick="window.history.forward();">
<INPUT type=button value="go(1)" onclick="window.history.go(1);">
<INPUT type=button value="go(-1)" onclick="window.history.go(-1);">
</FORM>

Объект navigator

Объект navigator посредством своих свойств и методов позволяет определить тип браузера и его возможности.

Пример


<P>navigator.userAgent =
<SCRIPT>
document.write(window.navigator.userAgent);
</SCRIPT>

<P>navigator.appName =
<SCRIPT>
document.write(window.navigator.appName);
</SCRIPT>

<P>navigator.appCodeName =
<SCRIPT>
document.write(window.navigator.appCodeName);
</SCRIPT>

<P>navigator.appVersion =
<SCRIPT>
document.write(window.navigator.appVersion);
</SCRIPT>

<P>navigator.language =
<SCRIPT>
document.write(window.navigator.language);
</SCRIPT>

<P>navigator.mimeTypes.length =
<SCRIPT>
document.write(window.navigator.mimeTypes.length);
</SCRIPT>

<P>navigator.navigator.mimeTypes[0] =
<SCRIPT>
document.write(window.navigator.mimeTypes[0]);
</SCRIPT>

<P>navigator.platform =
<SCRIPT>
document.write(window.navigator.platform);
</SCRIPT>

<P>navigator.plugins.length =
<SCRIPT> document.write(window.navigator.plugins.length);
</SCRIPT>

<P>Разрушение данных включено? navigator.taintEnabled() =
<SCRIPT>
document.write(window.navigator.taintEnabled());
</SCRIPT>

<P>Включена поддержка Java? navigator.javaEnabled() =
<SCRIPT>
document.write(window.navigator.javaEnabled());
</SCRIPT>

Методы объекта window

Пример


<P>window.alert() создает
<A href="JavaScript:window.alert('Внимание, будь готов!')">
окно предупреждения</A>

<P>window.confirm() создает
<A href="JavaScript:if(window.confirm('Ну что, допрыгался?')==true) {} else {};">
окно для подтверждения</A>

<P>window.prompt() создает
<A href="JavaScript:if(window.prompt('Сколько вам лет?')<=15) {window.alert('Молодняк')} else {window.alert('Старичок')};">
окно для ввода строки</A>

<P>window.open() создает
<A href="" target="_blank" onclick="window.open('about:blank','mywindow','dependent=yes,directories=yes,hotkeys=no,location=yes,menubar=yes,resizable=yes,scrollbars=yes,status=yes,titlebar=no,toolbar=yes,z-lock=yes,screenX=100,screeny=100,innerWidth=600,innerHeight=600,width=600,height=600,'); return false;">
новое окно</A>

Если необходимо закрыть текущее окно, то необходимо воспользоваться методом window.close() или self.close()
Если необходимо закрыть родительское окно, т.е. окно, из которого было открыто текущее, то - window.opener.close()
Чтобы закрыть из фрейма окно, содержащее фреймовую структуру, используйте window.parent.close()
Если необходимо закрыть произвольное окно, то тогда сначала нужно получить его идентификатор id=window.open(), а затем, в теле программы можно будет его закрыть - id.close()
Как видно из последнего примера, закрывают окно не по имени (значение атрибута TARGET тут ни при чем), а используют указатель на объект.

Пример

<FORM>
<INPUT TYPE=button VALUE="Открыть новое окно"
onClick="mywin=window.open('about:blank','test1','height=200,width=200');">
<BR>
<INPUT TYPE=button VALUE="Закрыть новое окно"
onClick="mywin=mywin.close();">
</FORM>

<A href="#" onclick="window.close(); return false;" class="allnews">Закрыть окно</А>

Пример использования window.focus() и window.blur()

<FORM>

<INPUT TYPE=button VALUE="Открыть новое окно"
onClick="mywin=window.open('about:blank','test1','height=200,width=400');">
<BR>

<INPUT TYPE=button VALUE="Открыть поток ввода в новое окно"
onClick="mywin.document.open(); mywin.document.write('посылаю вам телеграмму.');">
<BR>

<INPUT TYPE=button VALUE="Передать фокус в новое окно"
onClick="mywin.focus();">
<BR>

<INPUT TYPE=button VALUE="Убрать фокус с нового окна"
onClick="mywin.blur();">
<BR>

<INPUT TYPE=button VALUE="Закрыть новое окно"
onClick="mywin=mywin.close();">

</FORM>

Потоки вычислений

Два метода объекта window управляют потоками вычислений на HTML страницах:

Пример

<SCRIPT>
potok01=null
function pusk()
{
        if (potok01==null)
        {
                 a=new Date();
                 b=a.getHours()*3600+a.getMinutes()*60+a.getSeconds();
        }

        c=new Date();
        d=c.getHours()*3600+c.getMinutes()*60+c.getSeconds();
        window.document.form01.text01.value = d-b;
        potok01=setTimeout("pusk();",500);
}

function stop()
{
clearTimeout(potok01);
potok01=null;
}

</SCRIPT>

</HEAD>
<BODY>

<FORM name="form01">
Секундомер<BR>
<INPUT name="text01" size=10><BR>
<INPUT type=button value="Пуск" onClick="if (potok01==null) {pusk()};">
<INPUT type=button value="Стоп" onClick="stop();">
</FORM>

Событие onClick кнопки пуск вызывает на ваполнение пользовательскую функцию pusk(), которая выводит в текстовое поле на форме время, отсчитываемое в секундах, а также запускает метод setTimeout(). Метод setTimeout("pusk();",500) вызванный в функции pusk(), порождает новый поток вычислений - объект potok01. Potok01 вызовет через 500mc функцию pusk(), она обновит время в текстовом поле формы, и в следующий раз опять будет вызвана методом setTimeout() через 500mc.
Событие onClick кнопки стоп вызывает на ваполнение пользовательскую функцию stop(), которая вызовет метод clearTimeout(potok01) и уничтожит наш поток вычислений potok01.

Фреймы

Фреймы - это окна располагаемые в главном окне браузера. В качестве поля статуса фреймы используют поле статуса окна браузера. К фреймам из программы на JavaScript можно обратиться по имени или по индексу. Фреймы, созданные на HTML странице составляют одномерный массив фреймов frames[i]. Нумерация фреймов в массиве происходит автоматически от 0, в том порядке, в котором фрейм создан на HTML странице. Старшее для фреймов окно, окно в котором они расположены, - top (верхнее) или parent (родитель).

Пример

Так определена фреймовая структура
<FRAMESET cols="300,*">
<FRAME src="example016a.htm">
<FRAME name="fr01" src="Aechmea.htm">
</FRAMESET>

А это листинг из левого фрейма
<FORM>
<INPUT type=button value="Поменять рисунки"
        onClick="parent.frames[1].document.images[2].src=parent.frames[1].document.images[0].src;
        top.frames[1].document.images[0].src=top.frames[1].document.images[1].src;
        top.fr01.document.images[1].src=top.fr01.document.images[2].src;">

<INPUT type=button value="Обновить фрейм" onClick="parent.frames[1].location.href='Aechmea.htm';">
</FORM>

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

Объект Form

Формы и поля форм на HTML странице могут быть поименованы с помощью атрибутов name. Из JavaSscript программы, программист может обратиться к форме и ее элементам управления (к полям) по имени, или как к элемнтам массива. Для всех форм на HTML документе создается массив forms[i], а для всех элементов управления на форме - массив elements[i]. Следует иметь в виду что, если некоторые поля формы имеют одинаковое имя, то для них создается одноименный массив элементов.

Пример

<FORM name=For01 method=post action="JavaScript:void(0);">
<INPUT name=Inp01 type=text size=30 value="Это текстовое поле">
<INPUT name=Inp02 type=button value="Это кнопка"><BR>
<BR>
<INPUT name=Inp03 type=button value="Поменять value"
        onClick="a=document.For01.Inp02.value;
        document.forms[0].elements[1].value=document.forms[0].elements[0].value;
        document.For01.Inp01.value=a;">
<FORM>

Свойство action объекта Form

Обычно, значением свойства action объекта form является URL CGI-скрипта, к которому должен будет обратиться ваш браузер после того, как вы нажмете кнопку "submit" на форме. Вместо URL в свойстве action можно указать JavaScript программу.

Пример

<FORM name=For01 method=post action="JavaScript:void(0);">
<INPUT name=Inp01 type=text size=100 value="window.alert('Привет');"><BR>
<INPUT name=Inp02 type=button value="Загрузить JavaScript в action"
        onClick="document.For01.action='JavaScript:'+document.For01.Inp01.value+';void(0);' "><BR>

<INPUT name=Inp03 type=button value="Посмотреть свойство Form.action"
        onClick="document.For01.Inp01.value=document.For01.action;"><BR>

<INPUT type=submit value="Продемонстрировать JavaScript в action">
<FORM>

Окончательно URL формируется в момент события submit. В случае использования в action JavaScript программы, эта программа будет передана JavaScript интерпретатору на выполнение после наступления события submit. А до этого момента, мы можем менять код этой программы, то-есть код JavaSript программы может быть сгенерирован в процессе просмотра HTML страницы пользователем.

Пример, позволяющий писать и исполнять JavaScript код в интерактивном режиме

Свойство method объекта Form

Для успешного выполнения JavaScript кода, указанного в action, элемент Form используйте с атрибутом method=post. Метод get дописывает к URL, указанному в action знак "?", который будучи добавлен к JavaScript программе вызовет ошибку. Применение метода void(0) в JavaScript программе, указанной в action, отменяет обращение браузера к серверу.
Значение свойства method объекта form можно менять в программе на JavaScript.

Свойство target объекта Form

Свойство target объекта Form - определяет имя окна, в которое следует загружать результат обращения к CGI-скрипту.

Свойство elements[i] объекта Form

Из JavaSscript программы, программист может обратиться к элементам управления (к полям) формы по имени, или как к элемнтам массива. Массив элементов формы (объектов) elements[i] имеет нумерацию от 0.
Значение свойства формы elements.length равно общему количеству элементов на форме. Количество элементов на первой форме докумета будет равно document.forms[0].elements.length

Свойство encoding объекта Form

Свойство encoding объекта Form содержит значение HTML атрибута enctype, который указывает на возможность передачи данных из формы на сервер с перекодированием или без него. Значение "multipart/form-data" позволяет использовать национальный алфавит. Значение "application/x-www-form-urlecoded", используемое по умолчанию, перед передачей данных из формы на сервер, перкодирует символы из национального алфавита в &-последовательности.

Метод reset() объекта Form

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

Пример

<FORM>
<INPUT type=text value="Значение по умолчанию" size=25>
<INPUT type=button value="Изменим текст в поле ввода" onClick="document.forms[0].elements[0].value='Изменили текст';"><BR>
<A href="javascript:document.forms[0].reset();void(0);"> Установить значение по умолчанию</A>
</FORM>

Метод submit() объекта Form

Метод submit() объекта Form позволяет отправить данные из полей формы на сервер, аналогично использованию кнопки submit на форме.

Пример

<FORM action="JavaScript:window.alert('Данные отправлены');void(0);">
<INPUT type=text value="ваши данные" size=25><BR>
<A href="javascript:document.forms[0].submit();void(0);">Отправить данные</A>
</FORM>

Событие onReset объекта Form

Событие onReset - позволяет переопределить функцию метода reset().

Пример

<FORM onReset="window.alert('Сейчас восстановим');return true;">
<INPUT type=text value="Значение по умолчанию" size=25><BR>
<INPUT type=reset value="RESET">
</FORM>

Событие onSubmit объекта Form

Событие onSubmit - наступает перед передачей введенных в форму данных на сервер.

Пример

<FORM onSubmit="if(document.forms[0].elements[0].value=='')
        {window.alert('Заполните форму');return false;}
        else
        {window.alert('Форма отправлена');return true;};">
<INPUT type=text value="" size=25><BR>
<INPUT type=submit value="SUBMIT">
</FORM>

Текст в полях ввода форм

Объект класса Text (текстовое поле) можно создать в форме с помомощью THML тега <INPUT type=text>

Свойства текстовых полей

Методы текстовых полей

События текстовых полей

Путем перепрограммирования события onFocus, с помощью метода blur(), легко защитить текстовое поле ввода от изменения пользователем.

Пример

<FORM>
<INPUT type=text value="Попробуйте изменить этот текст" size=35 onFocus="this.blur()">
</FORM>

Списки и выпадающие меню

Одним из важных элементов интерфейса пользователя является меню. В HTML-формах для реализации меню используют контейнер SELECT, который, в свою очередь, вмещает в себя контейнеры OPTION. Эти объекты представляют собой списки вариантов выбора. При этом список может "выпадать" или прокручиваться внутри окна. Поля типа select позволяют выбрать из списка только один вариант, либо отметить несколько вариантов. Для управления полями типа select в JavaScript существует объект Select и подчиненный ему объект Option.

Объект Option

Объект Option интересен тем, что в отличие от многих других объектов JavaScript, имеет конструктор. Это означает, что программист может сам создать объект Option:

document.forms[0].elements[0].options[0] = new Option([ text, [ value, [ defaultSelected, [ selected ] ] ] ]);

Свойства объекта Option:

Методов и событий у объекта Option нет.
У объекта Option нет свойства Name поэтому, к встроенным в документ объектам Option можно обращаться только как к элементам массива options[] объекта Select.

Объект Select

Свойства объекта Select:

Методы объекта Select:

События объекта Select:

Обратиться к объекту Select из JavaScript можно по имени или как к элементу на форме (document.forms[0].elements[0]).

Пример

<SCRIPT>
function insNew()
{
i=document.forms[0].elements[2].length;
document.forms[0].elements[2].options[i] = new Option(document.forms[0].elements[0].value);
};
function delSel()
{
i=document.forms[0].elements[2].selectedIndex;
document.forms[0].elements[2].options[i] = null;
};
</SCRIPT>

<FORM>
<P>Новый пункт меню:
<INPUT type=text value="Пункт №2" size=35>
<INPUT type=button value="Добавить" onClick="insNew();"><BR>
<SELECT size=10 multiple>
<OPTION> Пункт №1
</SELECT><BR><BR>
<INPUT type=button value="Удалить" onClick="delSel();"><BR>
</FORM>

В приведенном примере на HTML странице в форме создан объект Select, c возможностью множественного выбора обпций, и один подчиненный ему объект Option. В этой же форме есть две кнопки и текстовое поле. Кнопка "Дбавить" вызывает пользовательскую функцию insNew(), а "Удалить" - delSel().
Функция insNew() с помощью конструктора new Option() создает новый объект Option со знечением text равным значению value текстового поля на форме. Для вычисления количества объектов Option воспользуемся свойством length объекта Select. Это значение используем в качестве индекса для нового обекта options[i] . Так как нумерация элементов массива объектов options[i] начинается с 0, то options[i] в данном контексте указывает на следующий, еще не созданный объект Option, который будет создан с помощью конструктора new Option().
Функция delSel(), с помощью свойства selectedIndex объекта Select вычисляет индекс выбранного на форме объекта Option. Путем присваивания этому объекту значения null, данный объект уничтожается, исчезает соответствующий этому объекту пункт меню.
В приведенном примере мы создали объект Select типа "select-multiple". Это позволяет нам с помощью клавиши "Ctrl" выбрать несколько строк меню. Но удалить все выбрнные объекты за один раз пользовательская функция delSel() не сможет, так как, используемое в ней свойство selectedIndex объекта Select указывает на номер только первого из выбранных объектов Option. Для того, чтобы удалить все выбранные объекты, необходимо переписать функцию delSel(). Необходимо организовать цикл, в котором будет проверено свойство selected каждого из объектов Option, и выбранные объекты будут удалены.

Пример

function delSel()
{
i=document.forms[0].elements[2].length;
for(n=i;nɬn--)
        {
        i--;
        if(document.forms[0].elements[2].options[i].selected==true)
                 {
                 document.forms[0].elements[2].options[i] = null;
                 };
        };
};

Кнопки

Свойства объекта Button:

Методы объекта Button:

События объекта Button:

Cookies

Объект Image

Объект Image создается в тот момент, когда в документ, c помощью тега HTML <IMG>, встраивается картинка. Кроме того, объект Image можнт быть создан программистом. Объекты Image обладают свойствами и с ними могут происходить события. Методов у объектов Image нет.

События объекта Image:

Свойства объекта Image:

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

Пример

<IMG name=flower src=Aechmea/Aechmea2.jpg border=0 hspace=10 onClick="window.alert('Image name:'+document.flower.name)">

<A href="javascript:void(0);" onClick="window.alert('Image name:'+document.images[1].name)">
<IMG name=aechmea SRC=Aechmea/Aechmea1.jpg border=0 hspace=10>
</A>

Где Aechmea2.jpg это: , а Aechmea1.jpg это:

К свойству name первой картинки мы обращаемся используя, определенное с помощью HTML атрибута name, имя объекта document.flower.name
Во втором случае, мы обращаемся к объекту, как к элементу массива document.images[1].name. В документе элементами массива images[] являются объекты image пронумерованные в порядке создания с помощью тегов <IMG>, начиная с 0.
Следует обратить внимание на то, что щелчек мыши по обеим картинкам вызывает окно alert, но над первой картинкой курсор не меняет своего изображения, а над второй меняет, как над ссылкой. В первом случае - переопределено событие onClick объекта Image, а во втором случае - объект Image находится в контейнере тега <A> и является ссылкой.

Объект Image имеетт встроенный конструктор и с помощью операции new можно создать новый экземпляр объекта image в оперативной памяти компьютера.

myImage = new Image ( [width,] [height] )

Загрузить изображение из сети во вновь созданный объект Image можно следующим образом:

myImage.src = "URL picture"

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

Пример

<SCRIPT>

pict=new Array(9)
n=0
while(n < 9)
{
pict[n] = new Image();
pict[n].src ="example027/"+n+".jpg";
n++;
};

k=1;
m=0;
function myA()
{
m=m+k;
document.images[0].src=pict[m].src;
if (m > 0 && m < 8)
        {
        toA=setTimeout('myA();',100);
        };
};

</SCRIPT>

</HEAD>
<BODY>

<IMG src="example027/0.jpg" onMouseOver ="myA();" onMouseOut="k=-k; clearTimeout(toA);">

Где 0.jpg - , 1.jpg - , 2.jpg - , 3.jpg - , 4.jpg - , 5.jpg - , 6.jpg - , 7.jpg - , 8.jpg -

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

Пример

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

Пример

<SCRIPT>
x1=new Image(); x1.src='example029/1x23.gif';
x4=new Image(); x4.src='example029/4x23.gif';

function menuover(N)
{
document.menu01[N].src=x4.src;
};

function menuout(N)
{
document.menu01[N].src=x1.src;
};
</SCRIPT>

<TABLE width=200 border=2 cellpadding=2 cellspacing=3 bgcolor="#ffcc99">
<TR><TD onMouseOver="menuover(0)" onMouseOut="menuout(0)">
        <IMG name="menu01" src="example029/1x23.gif" border=0 align=absmiddle>
        <A href="http://lightsnack.narod.ru/" target="_blank">Поваренная книга</A></TD></TR>
<TR><TD onMouseOver="menuover(1)" onMouseOut="menuout(1)">
        <IMG name="menu01" src="example029/1x23.gif" border=0 align=absmiddle>
        <A href="http://soldierly.narod.ru/" target="_blank">Дембельский альбом</A></TD></TR>
<TR><TD onMouseOver="menuover(2)" onMouseOut="menuout(2)">
        <IMG name="menu01" src="example029/1x23.gif" border=0 align=absmiddle>
        <A href="http://semester.narod.ru/" target="_blank">Несколько учебников</A></TD></TR>

где 1x23.gif - , 4x23.gif -

Описание языка JavaScript

Литералы

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

Значения

Типы данных

В JavaScript нет необходимости в объявлении типа данных переменной. Тип данных переменной определяется автоматически в момент присвоения ей значения. Конвертация типа данных происходит автоматически.
<SCRIPT>
        a="19"
        b="трасса Е"
        c=b+a*5
        document.write(c)
</SCRIPT>
В приведенном выше примере переменным a и b сначала присвоили значения строкового типа. В процессе вычисления выражения b+a*5, строковое значение переменной a будет преобразовано в число, с которым будет выполнена математическая операция - умножение. Результат этой операции - число, в дальнейшем будет преобразован в строку символов и с ним будет произведена строковая операция - конкатенция строк (объединение строк). В итоге, переменной c будет присвоено значение строкового типа. Приведенный скрипт напечатает - трасса Е95.

Объявление переменной

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

Область видимости переменных

Массивы определяемые пользователем

Создать массив, Array-объект можно двумя способами:

Нумерация элементов массива начинается с нуля (myArray[0], myArray[1], myArray[2]...).

Методы объекта Array: Свойства объекта Array:

Операции присваивания

Унарные арифметические операции
Результат операции зависит от того, знак операции записан как префикс или постфикс

Операции сравнения

Логические операции

Условная операция

condition ? val1 : val2
если condition - условие принимает значение true, результат операции равен val1, в противном случае - val2.

Условные операторы

if (condition)
{ statements1 }
else
{ statements2 }
если condition - условие принимает значение true, выполняется statements1, в противном случае - statements2.

switch (expression)
{
case label1 : statement1; break;
case label2 : statement2; break;
...
default : statementN;
}
если expression - выражение принимает значение совпадающее с одним из label, выполняется соответствующая часть программы statementsX. Если совпадений не обнаружено, по умолчанию (default), выполняется код statementN.

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

for (initialExpression; condition; incrementExpression)
{
statements
}
В начале, выполняется initialExpression - выражение, инициализирующее счетчик цикла. Затем проверяется условие condition и если оно вычисляется в true, то выполняются операторы тела цикла statements. Затем выполняется операция incrementExpression, обычно оказывающая влияние на значение условия condition; проверяется условие condition и если оно вычисляется в true, то выполняются операторы тела цикла statements. И таким образом, цикл повторяется до тех пор, пока condition вычисляется в true.

do
{
statement
}
while (condition)
Операторы цикла do...while, выполняются до тех пор, пока условие condition вычисляется в true.

while (condition)
{ statements }
Операторы цикла while, выполняются до тех пор, пока условие condition вычисляется в true.
Разница между циклами do...while и while состоит в том, что в цикле do...while, операторы цикла (statements) выполняются не менне одного раза, а в цикле while, только в том случае, если условие condition вычисляется в true.
Есть и общие черты у этих двух циклов - программист должен позаботиться о выходе из цикла в теле цикла statements, то есть, необходимо произвести такие манипуляции с аргументами выражения condition, что бы, однажды оно приняло значение false и цикл смог бы прерваться.

for ... in - цикл, позволяет прочитать все свойства объекта, указанного в качестве авгумента
for(v in window.document)
{
document.write(v+"<BR>");
}
Цикл из этого примера перечислит (распечатает на интернет странице) все свойства объекта document.

Комментарии

Объект Math

Объект Math обладает свойством PI. Math.PI хранит значение числа pi (3.141...).
Ниже перечислены методы Объекта Math и возвращаемое ими значение.

Объект String

Объект String обладает свойством length.
Ниже перечислены методы Объекта String.





Занимательные коды

При подготовке статьи были использованы материалы Интернет-Университета Информационных Технологий http://www.intuit.ru/, курс Введение в JavaScript, руководство Клиентский JavaScript, справочник Клиентский JavaScript, справочник HTML manual.
Рекомендуемая литература: "STM Цвет сайта Советы вебмастеру",

Другие материалы и статьи
Copyright © Диордица Александр г. Лыткарино 2006-07г.
Hosted by uCoz