[an error occurred while processing this directive]

3.4.2. Язык сценариев VBScript

Общая характеристика языка VBScript

VBScript - новейший член семейства языков программирования VisualBasic, позволяющий писать скрипты для Web. Используя VBScript Вы можете проверять правильность заполнения форм, автоматически генерировать HTML-странички и многое другое. VBScript общается с основным приложением, используя технологию ActiveX. VBScript интегрирован с броузерами WWW и приспособлен к работе с управляющими элементами ActiveX и другими объектами, встраиваемыми в активные HTML-странички.

Включение сценариев в гипертекст

Программа на VBScript вставляется в HTML-код с помощью контейнера <SCRIPT>, т.е. теги <SCRIPT> и </SCRIPT> обрамляют код на VBScript. Например, процедура проверки даты поставки может выглядеть следующим образом:

<SCRIPTLANGUAGE="VBScript">
<!--
 FunctionCanDeliver(Dt)
 CanDeliver = (Cdate(Dt) - Now()) > 2
 EndFunction
-->
</SCRIPT>

Отметим, что атрибут LANGUAGE определяет язык, на котором написан скрипт. Язык необходимо определить, поскольку начиная с версии 3.0 броузер MicrosoftInternetExplorer поддерживает и другие скриптовые языки, например, JavaScript. Также из примера видно, что функция встроена в тег комментария (<!-- ... -->). Это сделано для того, чтобы броузеры, не понимающие VBScript (например, NetscapeNavigator), не отображали текст скрипта на экране. Далее в примерах тег комментария указываться не будет. Вставлять контейнер <SCRIPT> можно в любом месте HTML-страницы - в разделе HEAD или в разделе BODY.

Особенности серверных сценариев

Как было сказано выше, скриптовый фрагмент в HTML-странице выделяется контейнером <SCRIPT>. В предыдущем примере программа на VBScript будет выполняться на клиенте (т.е. на машине пользователя). Но существует возможность выполнения скрипта на сервере. Для этого нужный скрипт необходимо заключить в пару тегов <% и %>. Таким образом, с помощью тегов <% и %> можно разделять скриптовую программу на фрагменты, выполняемые на сервере и на клиенте, например:

<SCRIPTLANGUAGE = "VBScript">
' скриптовый фрагмент, выполняемый на клиенте
<%
' скриптовый фрагмент, выполняемый на сервере
%>
...
</SCRIPT>

Если во фрагменте скрипта, выполняемого на сервере, необходимо послать какое-то значение клиентскому броузеру (значение переменной, результат выполнения функции и т.п.), то для этого в дополнение к обычной операции присваивания используется символ "=", например:

<HTML>
 <HEAD><TITLE>NowDemo</TITLE></HEAD>
 <BODYBGCOLOR=BLUE>
 <BR>
 <PALIGN=CENTER>
 <FONTSIZE=5 COLOR=YELLOW>
 Добро пожаловать на наш сервер.
 Локальное время:
 <B><% =Now %></B>
 </FONT>
 </P>
 <HR>
 </BODY>
</HTML>

Здесь функция Now используется для отправки информации о дате и времени клиентскому броузеру. В целом программы, создаваемые для выполнения на сервере, работают по тем же правилам, что и скриптовые программы на клиенте.

Типы данных, переменные и константы, соглашения по именованию

Типы данных

VBScript имеет только один тип данных - Variant - специальный тип данных, который может содержать различные виды информации, в зависимости от того, как она используется. Тип данных Variant существует только в VBScript. Все функции VBScript возвращают значения только типа Variant. Тип данных Variant может содержать как численную, так и текстовую информацию. Variant ведет себя как число, когда он используется в численном контексте, и как текст - в случае использования в текстовом контексте. Вот почему, когда Вы используете данные выглядящие как числа, VBScript интерпретирует их как числа и производит с ними соответствующие операции. Конечно же всегда можно определить числа как текстовую информацию, но для этого необходимо обрамить их кавычками. Кроме простого деления на числовую и текстовую информацию, тип данных Variant можно классифицировать по специальным классам числовой информации. Например, Вы можете использовать числовые данные, обозначающие дату или время. Также числовые данные имеют большой диапазон значений, начиная с булевых значений и заканчивая числами с плавающей точкой. Все эти различные классы значений содержится в типе данных Variant и называются подтипами. Все возможные подтипы данных Variant перечислены ниже в таблице 3.4.

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

Переменные и константы

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

<SCRIPTLANGUAGE="VBScript">
DimTop, Bottom, Left, Right
</SCRIPT>

Также можно косвенно объявить переменную путем простого использования ее имени в любом месте скрипта. Но этим способом не нужно злоупотреблять, поскольку при использовании имени переменной могут возникать орфографические ошибки, что может явиться причиной неожиданных результатов выполнения программы на VBScript. Поэтому рекомендуется использовать оператор OptionExplicit для объявления всех переменных и констант программы. При использовании оператора OptionExplicit он должен быть первым оператором в контейнере <SCRIPT>.

В VBScript существуют ограничения на количество используемых переменных:

Таблица 3.4. Подтипы данных Variant ПодтипОписаниеEmptyПеременная пуста. В качестве значения может быть 0 для числовой переменной или строка нулевой длины ("") для текстовой переменной.NullПеременная не содержит никакого значения.BooleanЗначение может быть либо True, либо False.ByteЦелое число в диапазоне от 0 до 255.IntegerЦелое число в диапазоне от -32,768 до 32,767.LongЦелое число в диапазоне от -2,147,483,648 до 2,147,483,647SingleЧисло с плавающей запятой обычной точности в диапазоне от -1.79769313486232E308 до -4.94065645841247E-324 для отрицательных значений и от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений.DoubleЧисло с плавающей запятой двойной точности в диапазоне от -1.79769313486232E308 до 4.94065645841247E-324 для отрицательных значений и от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений.Date (Time)Определяет число, характеризующее дату от 1 января 1000 г. до 31 декабря 99999.Stringопределяет строку переменной длины, достигающей до 2 миллиардов символов.ObjectОпределяет объект.ErrorОпределяет номер ошибки.

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

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

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

Существует два типа переменных: скаляр - это переменная, которая может одновременно содержать только одно значение. Другой тип переменных позволяет присваивать множество родственных значений. Такой тип называется массивом. Переменная типа массив объявляется несколько иначе, чем переменная типа скаляр. Различие заключается в том, что после имени переменной в скобках указывается номер последнего элемента массива, например, в следующем примере одномерный массив содержит 11 элементов (первый элемент массива всегда имеет номер 0):

<SCRIPTLANGUAGE="VBScript">
DimA(10)
</SCRIPT>

Такой массив является с фиксированным количеством элементов. Для обращения к элементам массива используется номер элемента, указывающийся в скобках после имени массива. Массивы могут быть не только одномерными. Для объявления многомерного массива нужно в скобках через запятую перечислить количество элементов каждой размерности. Например, при объявлении двумерного массива первым указывается количество строк, а затем количество столбцов. Кроме массива с фиксированным количеством элементов, можно объявить массив, размер которого может изменяться во время выполнения сценария. Такой массив объявляется как обычный массив, используя оператор Dim, или оператор ReDim (используется для объявления массивов с переменным количеством элементов). Отличие заключается в том, что в скобках после имени массива не указывается число элементов массива, например:

<SCRIPTLANGUAGE="VBScript">
DimMyArray()
ReDimAnotherArray()
</SCRIPT>

Для использования такого массива позже необходимо использовать оператор ReDim для определения числа размерностей и размер каждой из них. В следующем примере оператор ReDim устанавливает размер массива 25. Далее оператор ReDim устанавливает размер этого же массива 30. Специальный ключ Preserve используется для сохранения значений элементов массива, которые были определены ранее. Если этот ключ не использовать, то при изменении размерности массива значения всех элементов стираются.

<SCRIPTLANGUAGE="VBScript">
ReDimMyArray(25)
 . . .
 ReDimPreserveMyArray(30)
</SCRIPT>

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

Константа - это значащий идентификатор, который содержит число или строку. Значение константы во время выполнения скрипта изменяться не может. На данный момент в VBScript нет встроенных констант, определенных языком. Константа объявляется так же как и переменная с помощью оператора Dim. После объявления константы ей нужно присвоить значение, которое потом будет соответствовать имени константы.

Отметим, что текстовые значения обрамляются кавычками, а значения типа Дата/Время - знаком "решетка" (#). К сожалению, нет никакого различия при объявлении переменных и констант. Поэтому может возникнуть желание как-то различать их, для того чтобы не попытаться использовать константу как переменную. В этом случае можно предложить при определении имени константы давать ей какую-нибудь приставку, например vb, или можно называть константы строчными буквами, как это рекомендуется в соглашениях по именованию.

Операторы и управляющие конструкции

Операторы VBScript

VBScript имеет полный набор операторов, включая арифметические и логические операторы, операторы сравнения и конкатенации. Когда в одном выражении встречаются несколько операторов, то определяется порядок выполнения этих операторов. Такой порядок выполнения всех операторов называется приоритетом операторов. Для того, чтобы пренебречь приоритетом выполнения операторов можно использовать скобки. Тогда операторы в скобках всегда будут выполнятся перед выполнением других операторов. Внутри скобок соблюдается приоритет выполнения операторов. Если выражение содержит операторы различных типов, то в этом случае первыми выполняются арифметические операторы, следующими выполняются операторы сравнения и, затем, логические операторы. Операторы сравнения всегда имеют равный приоритет, поэтому они выполняются слева направо. Арифметические и логические операторы имеют приоритет выполнения, который показан ниже в таблице 3.5 (операторы указаны в порядке убывания приоритета).

Таблица 3.5. Операторы языка VBScript ОписаниеОбозна-чениеОписаниеОбозна-чениеОписаниеОбозна-чениеВозведение в степень ^Равенство=Логическое отрицаниеNotИзменение знака-Неравенство<>КонъюнкцияAndУмножение*Меньше<ДизъюнкцияOrДеление/Больше>ИсключениеXorЦелочисленное деление\Меньше или равно<=Логическая эквивалентностьEqvДеление по модулюModБольше или равно>=Логическая импликацияImpСложение+Эквивалентность объектовIs  Вычитание-    Сложение строк (конкатенация)&    
Арифметические операторыОператоры сравненияЛогические операторы

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

Управляющие конструкции VBScript

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

Условный оператор If ... Then ... Else оценивает условие как False или True, а затем определяет один или несколько операторов, соответствующих условию, для дальнейшего выполнения. Обычно в условном операторе используются операторы сравнения. В VBScript разрешается использовать вложенность условных операторов.

Если при выполнении условия нужно выполнить только один оператор, то используется однострочный условный оператор, например:

<SCRIPTLANGUAGE="VBScript">
SubFixDate()
 DimmyDate
 myDate = #2/13/95#
 IfmyDate < NowThenmyDate = Now
 EndSub
</SCRIPT>

В случае, когда нужно выполнить несколько операторов при выполнении условия, используется многострочный оператор If ... Then ... Else, например:

<SCRIPTLANGUAGE="VBScript">
SubAlertUser(value)
 Ifvalue = 0 Then
 AlertLabel.ForeColor = "Red"
 AlertLabel.Font.Bold = True
 AlertLabel.Font.Italic = True
 EndIf
 EndSub
</SCRIPT>

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

Также оператор If ... Then ... Else можно использовать для определения двух блоков операторов, один из которых выполняется, когда условие верно, а другой - в противном случае. Такой вариант показан ниже:

<SCRIPTLANGUAGE="VBScript">
 SubAlertUser(value)
 Ifvalue = 0 Then
 AlertLabel.ForeColor = vbRed
 AlertLabel.Font.Bold = True
 AlertLabel.Font.Italic = True
 Else
 AlertLabel.Forecolor = vbBlack
 AlertLabel.Font.Bold = False
 AlertLabel.Font.Italic = False
 EndIf
 EndSub
</SCRIPT>

Для повторения группы операторов в VBScript используются циклы. Существуют следующие операторы цикла:

Для проверки условия в операторе цикла Do ... Loop используются два ключевых слова While и Until. Ключевое слово While можно поставить перед входом в цикл (как показано в первом примере) или в конце цикла (как показано во втором примере). Отличие заключается в том, что в первом случае цикл начнет выполняться только при выполнении условия, а во втором случае операторы цикла сначала выполняться один раз, и только потом произойдет проверка условия. Цикл выполняется, пока выполняется условие.

<SCRIPTLANGUAGE="VBScript">
SubChkFirstWhile()
 Dimcounter, myNum
 counter = 0
 myNum = 20
 DoWhilemyNum > 10
 myNum = myNum - 1
 counter = counter + 1
 Loop
 MsgBox "Theloopmade " & counter & " repetitions."
 EndSub

 SubChkLastWhile()
 Dimcounter, myNum
 counter = 0
 myNum = 9
 Do
 myNum = myNum - 1
 counter = counter + 1
 LoopWhilemyNum > 10
 MsgBox "Theloopmade " & counter & " repetitions."
 EndSub
</SCRIPT>

Ключевое слово Until также можно ставить в начале и в конце цикла. Отличие от цикла с ключевым словом While заключается в том, что в данном случае цикл выполняется, пока условие неверно. Примеры использования ключевого слова Until приведены ниже.

<SCRIPTLANGUAGE="VBScript">
SubChkFirstUntil()
 Dimcounter, myNum
 counter = 0
 myNum = 20
 DoUntilmyNum = 10
 myNum = myNum - 1
 counter = counter + 1
 Loop
 MsgBox "Theloopmade " & counter & " repetitions."
 EndSub

 SubChkLastUntil()
 Dimcounter, myNum
 counter = 0
 myNum = 1
 Do
 myNum = myNum + 1
 counter = counter + 1
 LoopUntilmyNum = 10
 MsgBox "Theloopmade " & counter & " repetitions."
 EndSub
</SCRIPT>

Кроме того, при необходимости можно принудительно заканчивать выполнение цикла Do ... Loop. Для этого используется оператор ExitDo. Например, может потребоваться выход из цикла при выполнении некоторого условия. Тогда в тело цикла нужно включить условный оператор, который будет проверять выполнение этого условия. Если условие выполнится, то произойдет выполнение оператора ExitDo, и программа закончит выполнение цикла, а в противном случае цикл будет выполняться как обычно. Пример использования оператора ExitDo показан ниже:

<SCRIPTLANGUAGE="VB">
SubExitExample()
 Dimcounter, myNum
 counter = 0
 myNum = 9
 DoUntilmyNum = 10
 myNum = myNum - 1
 counter = counter + 1
 IfmyNum < 10 ThenExitDo
 Loop
 MsgBox "Theloopmade " & counter & " repetitions."
 EndSub
</SCRIPT>

Оператор цикла While ... Wend предназначен для тех, кто уже хорошо знает VBScript. Кроме того, поскольку этот оператор не имеет достаточной гибкости при использовании, то рекомендуется вместо него использовать оператор Do ... Loop.

Оператор цикла For ... Next используется для повторения группы операторов заданное количество раз. Для повторения выполнения операторов используется переменная-счетчик, чье значение каждый раз увеличивается или уменьшается после каждого выполнения цикла. Например, следующая процедура MyProc выполняется 50 раз. Выражение For определяет переменную-счетчик х, а также ее начальное и конечное значения. Выражение Next увеличивает счетчик на 1.

<SCRIPTLANGUAGE="VBScript">
SubDoMyProc50Times()
 Dimx
 Forx = 1 To 50
 MyProc
 Next
 EndSub
</SCRIPT>

Величину шага, на который увеличивается или уменьшается счетчик, можно задавать самому. Для этого используется ключевое слово Step. Например, в следующем примере счетчик увеличивается на 2 после каждого выполнения цикла:

<SCRIPTLANGUAGE="VBScript">
SubTwosTotal()
 Dimj, total
 Forj = 2 To 10 Step 2
 total = total + j
 Next
 MsgBox "Thetotalis " & total
 EndSub
</SCRIPT>

Для уменьшения счетчика нужно указать отрицательное значение шага, Только нужно помнить, что в этом случае конечное значение счетчика должно быть меньше начального. Для принудительного выхода из цикла For ... Next используется оператор ExitFor.

Процедуры и функции

В VBScript существует два типа подпрограмм - процедуры и функции.

Процедура - это набор операторов VBScript, обрамленных операторами Sub и EndSub, которые выполняют какие-то действия. Процедура не возвращает никакого значения. Процедура может "захватывать" аргументы (константы, переменные или выражения). Если процедура не имеет аргументов, то выражение Sub должно содержать пустые круглые скобки. В примере, приведенном ниже, процедура ConvertTemp использует две встроенные функции VBScript - InputBox и MsgBox - для обмена с пользователем некоторой информацией.

Функция - это набор операторов VBScript, обрамленных операторами Function и EndFunction. Функция похожа на процедуру, но отличается тем, что может возвращать значение. Функция также как и процедура может "захватывать" аргументы. Функция всегда возвращает значение типа Variant. В примере функция Celsius пересчитывает температуру из градусов по Цельсию в градусы по Фаренгейту.

<SCRIPTLANGUAGE="VBScript">
SubConvertTemp()
 temp = InputBox("PleaseenterthetemperatureindegreesF.", 1)
 MsgBox "Thetemperatureis " & Celsius(temp) & " degreesC."
 EndSub
FunctionCelsius(fDegrees)
 Celsius = (fDegrees - 32) * 5 / 9
 EndFunction
</SCRIPT>

Процедуры и функции перед их использованием обязательно должны быть описаны в начале раздела HEADHTML-страницы. Весь последующий скрипт должен быть также в разделе HEAD. Кроме того, выражения Sub и Function как и все другие операторы VBScript должны находится в контейнере <SCRIPT>.

Каждый элемент данных, передаваемый подпрограмме, называется аргументом. Аргументы указываются в скобках через запятую после имени процедуры или функции. Например, в следующем примере переменная fDegrees содержит значение, которое используется в функции Celsius для преобразования температуры:

<SCRIPTLANGUAGE="VBScript">
FunctionCelsius(fDegrees)
 Celsius = (fDegrees - 32) * 5 / 9
 EndFunction
</SCRIPT>

Аргументам можно присваивать любые имена в соответствии с соглашениями по именованию.

При использовании функций в скрипте, ее имя должно всегда стоять в правой части равенства при присвоении значения переменной или внутри какого-либо выражения, например:

<SCRIPTLANGUAGE="VBScript">
Temp = Celsius(fDegrees)
</SCRIPT>

или

<SCRIPTLANGUAGE="VBScript">
MsgBox "TheCelsiustemperatureis " & Celsius(fDegrees) & " degrees."
</SCRIPT>

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

<SCRIPTLANGUAGE="VBScript">
CallMyProc(firstarg, secondarg)
MyProcfirstarg, secondarg
</SCRIPT>

Объекты и их иерархия, методы и свойства

Язык сценариев VBScript является объектным языком. Объекты характеризуются свойствами и методами. Свойства представляют собой именованные поля объектов. А методы являются процедурами и функциями, связанными с данным объектом и обрабатывающими его свойства. Не имеется прямой поддержки наследования, однако объекты могут быть вложенными в другие объекты, образуя объектную иерархию. Объекты VBScript бывают нескольких видов:

Объекты броузера - стандартные (встроенные) объекты VBScript - начинаются с объекта window, в который вложены объектыnavigator, location, history и document. Объект window дает возможность манипулировать окнами броузера. Объект navigator позволяет получить информацию об используемом броузере. Через свойства и методы location программист получает доступ к указателю URL текущего файла и его отдельным элементам. Методы объекта history позволяют перемещаться по пройденным URL вперед, назад и на любой произвольный указатель в массиве истории. Объект documentопределяет свойства HTML-документа, например, title - заголовок документа, методы динамического создания документа, например, writeln(), а также отражает вложенность форм и их элементов.

Своеобразие доступа к свойствам (полям) и методам элементов формы определяется объектным характером языка VBScript, в нем существует четкая иерархия объектов документа:

DOCUMENT
   ФОРМА
      ЭЛЕМЕНТ
          СВОЙСТВО или МЕТОД()

Доступ к свойствам и методам элементов формы производится путем перечисления имен всех объектов, составляющих форму. Например, обращение к значению текстового поля L в форме frm будет выглядеть: document.frm.L.value.

Кроме стандартных объектов и объектов документов, пользователь может создать в сценарии с помощью оператора CreateObject свои объекты и использовать их как любые другие.

Обработка событий

С помощью сценария на VBScript можно обрабатывать информацию при использовании форм перед тем, как отправить ее на сервер для дальнейшей обработки. Раньше информация из форм обрабатывалась на сервере. В частности, можно обрабатывать различные события элементов формы. Т.е. для любого события (нажатие кнопки, выбор элемента списка и т.д.) можно написать скрипт на VBScript, который будет выполняться при выполнении этого события. Ниже показан простой пример, в котором при нажатии кнопки появляется диалоговое окно с фразой "Wonderfultobehold":

<HTML>
<HEAD><TITLE>ASimpleFirstPage</TITLE>
<SCRIPTLANGUAGE="VBScript">
SubButton1_OnClick
 MsgBox " Wonderfultobehold."
EndSub
</SCRIPT>
</HEAD>
<BODY>
<H3>ASimpleFirstPage</H3><HR>
<FORM><INPUTNAME="Button1" TYPE="BUTTON" VALUE="ClickHere"></FORM>
</BODY>
</HTML>

Когда InternetExplorer "просматривает" HTML-страницу, он обнаруживает тег <SCRIPT>, определяет, что скрипт написан на VBScript, и запоминает код. Затем, когда пользователь щелкает на кнопке, InternetExplorer организует связь между кнопкой и процедурой, которая ей соответствует, и затем выполняет эту процедуру.

Процедура внутри контейнера <SCRIPT> называется процедурой обработки события. Обратите внимание, что имя процедуры состоит из двух частей, соединенных знаком подчеркивания (_): имени кнопки, заданное в теге <INPUT> при описании формы (Button1), и названия события (OnClick). Каждый раз при нажатии кнопки Button1, InternetExplorer ищет процедуру с именем Button1_OnClick, и если такая процедура существует, то она выполняется. Описать обработку событий можно еще двумя способами, хотя предыдущий способ является основным и наиболее простым.

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

<INPUTNAME="Button1" TYPE="BUTTON"
VALUE="ClickHere" OnClick='MsgBox " Wonderfultobehold."'>

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

Также можно написать скрипт в контейнере <SCRIPT>, указав явным образом элемент формы и событие:

<SCRIPTLANGUAGE="VBScript" EVENT="OnClick" FOR="Button1">
MsgBox " Wonderfultobehold."
</SCRIPT>

В этом случае, после того как Вы определили в контейнере <SCRIPT> событие и элемент управления, к которому оно относиться, уже не надо пользоваться выражениями Sub и EndSub.

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

<HTML>
<HEAD><TITLE>SimpleValidation</TITLE>  <SCRIPTLANGUAGE="VBScript">
SubSubmit_OnClick
 
 DimTheForm
 SetTheForm = Document.ValidForm
 IfIsNumeric(TheForm.Text1.Value) Then
 IfTheForm.Text1.Value < 1 OrTheForm.Text1.Value > 10 Then
 MsgBox "Pleaseenteranumberbetween 1 and 10."
 Else
 MsgBox "Thankyou."
 TheForm.Submit' Datacorrect; sendtoserver.
 EndIf
 Else
 MsgBox "Pleaseenteranumericvalue."
 EndIf
EndSub
</SCRIPT>
</HEAD>
<BODY>
<H3>SimpleValidation</H3><HR>
<FORMNAME="ValidForm">
Enteravaluebetween 1 and 10:
<INPUTNAME="Text1" TYPE="TEXT" SIZE="2">
<INPUTNAME="Submit" TYPE="BUTTON" VALUE="Submit">
</FORM>
</BODY>
</HTML>

Этот пример отличается от предыдущих, тем, что здесь для проверки содержимого поля ввода используется свойство Value. Для того, чтобы обратиться к свойству Value, необходимо указать имя поля ввода. Всегда нужно указывать полное имя объекта формы - Document.ValidForm.Text1. Но чтобы всегда не писать длинные имена, можно поступить следующим образом: сначала необходимо объявить некоторую переменную (в примере TheForm), а затем используя выражение Set поставить ей в соответствие имя формы. После этого объявленную переменную можно использовать в качестве имени формы.

В последнем примере использовалась зарезервированная кнопка Submit, которая обычно используется для отправки данных из формы на сервер. Но в нашем примере при нажатии этой кнопки запускается функция проверки правильности введенной информации. В случае корректности информации, введенной пользователем, необходимо отправить ее на сервер для обработки. Это делается с помощью метода Submit. Этот метод вызывается в примере следующей строкой:

TheForm.Submit

Назад | Содержание | Вперед

  [an error occurred while processing this directive]