КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Что такое HTTP 18 страница
ПРИМЕЧАНИЕ Я упомянул, конечно же, далеко не все встроенные объекты JavaScript. Просто именно эти обычно используются в веб-программировании. Если вы хотите узнать все о встроенных объектах, обратитесь к соответствующему разделу на сайте JavaScript: http://developer.netscape.com/ docs/manuals/js/client/jsguide/obj.htm/. Объект String Объект Stri ng сам по себе интересен хотя бы тем, что не нужно использовать нотацию типа stri ng. property. На самом деле любая создаваемая вами строка представляет собой объект String. Создается этот объект следующим образом: mystring = "Вот такая строка" Переменная mystring — это и есть объект. Например, чтобы получить значение длины строки, выполните следующее присваивание: Strlen = mystring.length Когда вы создаете строковую переменную, объект String создается JavaScript автоматически. Длина строки хранится в свойстве length. (Обратите внимание на то, что length — это именно свойство, а не метод, поэтому в данном случае круглые скобки не нужны.) С рассматриваемым нами объектом ассоциирован также ряд методов типа toUpperCase(). Сего помощью можно все буквы строки перевести в верхний регистр. Делается это так: mystring - mystring.toUpperCase() Если строка была вида «Вот такая строка», то после выполнения этой операции она станет такой: «ВОТ ТАКАЯ СТРОКА». В таблице 17.2 показаны некоторые методы, которые можно применять к строковым объектам. Таблица 17.2. Методы объекта String в JavaScript
Может быть, вы обратили внимание, что в таблице как-то немножко странно постоянно пишется о том, что строка выводится как что-то. Причина кроется в том, что методы на самом деле не изменяют текущих значений строки. Вместо этого они возвращают значение, соответствующее их функциям. Так, метод small () выводит строку как уменьшенный текст, a toUpperCase возвращает строку, состоящую из заглавных букв. Поэтому следующий пример не меняет в том, что мы видим на экране, ровным счетом ничего, потому как small () не изменяет исходную строку. <script type="text/javascript"> Наверное, большего эффекта мы добьемся, если напишем: <script type="text/javascript"> Теперь мы измененное значение присвоили новой переменной, поэтому на экране мы увидим изменения. Ну так и что же делают эти методы? Почему, например, следующие две строки дадут один и тот же результат? document.write("<big>" + mystring + "</big>"):. Подумайте. Некоторые теги нуждаются в более подробных пояснениях. Особенно те, которые имеют дело с индексами. Итак, все символы в строках пронумерованы слева направо, начиная с нуля. Рассмотрим пример. Ниже вы видите строку, под каждой буквой которой расположена цифра — индекс данной буквы. (Допустим, строка является значением переменной kakdela.) Как дела? Теперь обратимся к методам обработки этой строки. Возьмем такую команду: kakdela.charAt(l). Результатом ее выполнения будет символ «а», индекс которого в нашей строке равен 1. Обратная операция выглядит так: kakdela.indexOfC'a"), результат ее выполнения равен 1. Между прочим, буква «а» встречается дважды. Результатом выполнения kakdela.lastlndexOfC'a") будет 7 — индекс последнего вхождения буквы «а». Объект Math В объекте Math содержатся некоторые полезные значения констант, а также математические методы. Свойствами объекта Math являются е, Q (PI) и Ige (LOG10E, десятичный логарифм числа е). Их можно использовать очень просто: нужно прибавить к имени свойства имя объекта. Например: Var pi_value = Math.PI; В таблице 17.3 перечислены-различные свойства объекта Math. Таблица 17.3, Свойства объекта Math
Конечно, все эти свойства в данном случае — это просто удобный способ хранить разные значения, используемые в вычислениях. Однако наряду со свойствами в объекте Math имеется и ряд методов. Вызываются они точно так же, как любые другие. Тяжело переоценить уникальную возможность при помощи всего одной строки кода узнать arcsin числа 0,239. Например: Math.asin(0.239); В таблице 17.4 приведены методы объекта Math. Таблица 17.4. Методы объекта Math
Эти методы очень сильно помогут вам, если придется писать скрипты с какими-нибудь более или менее серьезными математическими вычислениями. Объект Date Давайте кратко рассмотрим еще один встроенный объект JavaScript, который, возможно, тоже вам когда-нибудь пригодится. Собственно говоря, пригодиться он может в любой момент. Потому что совершенно неожиданно для самого себя вы можете вдруг захотеть вставить где-нибудь на странице текущую дату или число. Однако не только таким целям служит объект Date. С его помощью можно производить математические действия над датами. Чтобы использовать методы Date, нужно создать экземпляр объекта: todayDate = new Date(): Если вы при создании такого объекта ничего не укажете в скобках, он по умолчанию будет использовать текущую дату и время в таком формате: День Месяц Число ЧЧ:ММ:СС Пояс Год Вот пример полной даты: Thu Aug 22 19:09:02 CST 2002 Методы объекта Date можно использовать, чтобы, например, вычитать даты. Или части полных дат, такие как todayDate. getDay (), todayDate. getDate() или todayDate. getHours (). Если вы хотите разместить текущую дату и время на своей странице, то делается это следующим образом: <script type="text/javascript"> <!-- прячем код Результат: Сегодня 22/7/2002 Резюме Итак, в этой главе вы познакомились с основами языка написания скриптов JavaScript. Среди вопросов, которые мы затронули, были следующие: как добавить скрипт, как спрятать код от браузеров, не имеющих поддержки JavaScript, как закомментировать часть скрипта. Затем, как вы помните, был приведен классический пример «Hello World», в котором я постарался показать основные принципы работы со скриптами. Затем мы перешли к более конкретным вопросам: функции, их объявление и вызов из тела скрипта. Переменные, их создание, присваивание им значений, различные варианты инкремента/декремента. В том же разделе было рассказало и о массивах. После переменных мы обратились к операциям сравнения. Рассмотрели, чем они отличаются друг от друга и от математических операций. Узнали об их использовании, а значит, изучили циклы и условные операторы. Наконец, мы затронули такую концептуальную тему, как объектно-ориентированное программирование вообще и программирование на JavaScript в частности. Конечно, по сравнению со «старшими братьями», в этом языке реализована лишь малая часть принципов QOLL, но и с ее помощью можно делать многое. В конце главы мы рассмотрели несколько встроенных объектов: String, Math и Date. Все это нам очень сильно пригодится в следующих двух главах, где мы более подробно будем говорить о сложных скриптах и решении различных задач с помощью JavaScript. Глава 18. JavaScript и пользовательский ввод
В этой главе мы обсудим круг задач, решаемых с помощью JavaScript. Вы узнаете о различных способах обработки событий, происходящих на веб-странице с участием пользователей. Вы узнаете о том, как обрабатывать введенные в HTML-формы данные, применяя JavaScript, как производить вычисления и возвращать значения. Также мы поговорим о том, как работать с полноценными формами, то есть обрабатывать ошибки, сообщать о неправильно введенных данных до отправки их на обработку CGI-скриптами. Наконец, мы рассмотрим некоторые интересные методы автоматизации работы с сайтом, реализуемые на JavaScript. Среди них автоматическая переадресация, загрузка страниц и работа с фреймами под управлением скриптов. В этой главе вы найдете следующие разделы:
События JavaScript В главе 17 много слов было сказано об обработке событий. Собственно говоря, одна из важнейших функций JavaScript состоит как раз в реакции на различные действия пользователя, будь то нажатие на кнопку, гиперссылку или просто наведение мышки на какой-либо объект. Все, что пользователь может делать на странице, называется событием, как и все, что автоматически происходит на странице или в браузере (или в системе). Например, загрузка страницы — событие. Выгрузка страницы — это, разумеется, тоже событие. Чтобы научиться обрабатывать эти события, нужно понять, как создаются обработчики событий для конкретных элементов XHTML. В общем случае формат следующий: <element обработчик="код JavaScript или вызов функции"> Существует определенный набор элементов HTML, которые имеют поддержку атрибутов, связанных с обработчиками событий. Есть, например, обработчики, специально предназначенные для работы с элементом <body> и позволяющие определять какие-то автоматические действия при загрузке страницы в браузере. Элементы <form> имеют множество обработчиков событий. Мы рассмотрим пример, который позволяет по нажатию кнопки подтверждать не форму целиком, а только данные, передаваемые в функцию JavaScript: <Н1>ОбраОотка введенных данных</H1> Что делает этот отрывок кода? Просит пользователя ввести число в поле, расположенное в начале формы. После этого ему нужно нажать кнопку «Счет». При этом будет запущен обработчик события onclick. В нем происходит вызов некоторой функции под названием compute. Ей передается указатель на значение, каковым является объект <input> по имени userEntry. Из него функция извлечет данные, обработает их и возвратит результат, присвоив его переменной result. Эта переменная выводится в текстовом поле на форме. Именно для этого второе текстовое поле имеет то же значение атрибута name, что и переменная, хранящая нужную информацию. В браузере при загрузке такой страницы вы увидите то, что представлено на рис. 18.1. (Обратите внимание на то, что сама функция в примере не показана, но все, что она делает, — это добавляет к исходному значению число 100.) Рис. 18.1. Используя обработчики ошибок и элементы формы, JavaScript может возвращать значения, не заботясь о CGI-скриптах Типы обработчиков ошибок События, относящиеся в значительной степени к формам, представляющие собой атрибуты скриптов, у которых в то же время отсутствуют формальные требования элемента <script>, называются внутренними. Тем не менее они могут работать не только с элементами <form>. Некоторые события бывают связаны с какими-то определенными элементами HTML, а другие — с целым рядом элементов. И те и другие представлены в табл. 18.1. Таблица 18.1. Обработчики событий
Создание обработчика событий сводится к добавлению атрибутов к тому элементу, с которым эти события могут происходить. Этот атрибут будет носить одно из названий, перечисленных в таблице. После знака равенства в кавычках можно написать либо код скрипта, либо вызов функции. Рассмотрим пример, в котором вызывается встроенная функция: <body onunload="alert('Спасибо за визит! Приходите еще!')"> В этом примере показано, что в JavaScript можно использовать как одинарные, так и двойные кавычки. Думаю, понятно, почему и зачем. Если в приведенном примере везде использовать одинаковые кавычки, то "al ert" закроется слишком быстро. Итак, одним из способов отреагировать на пользовательский ввод является показ какого-нибудь сообщения. Сообщение типа alert похоже на диалоговое окно, разница состоит только в том, что вместо двух кнопок на нем расположена одна. Это называется «окном предупредительных сообщений». Так вот, это окно являетсяпримером прямого взаимодействия с пользователем, причем часто главное окно браузера блокируется до тех пор, пока оно не будет закрыто. СОВЕТ Если хотите, чтобы в окне сообщений было больше одной строки, используйте спецсимвол перевода каретки (\n). Помимо встроенных функций типа alert() можно, разумеется, вызывать и собственные: <input type="text" name="phoneNumber" В этом примере вызывается функция checkPhone(), ей передается значение, хранящееся в поле ввода <input>.c именем phoneNumber. Как именно передается? Вопрос хороший, поскольку на самом деле передается не само значение, а указатель на него. Причем не простой, а служебный указатель this, речь о котором пойдет далее. Указатель this По сути дела, указатель this заменяет имя текущего объекта. В данном случае того объекта, с которым связан обработчик. Рассмотрим пример, являющийся продолжением предыдущего: <form name="myForm"> Здесь буквально говорится с помощью this: «Этот элемент ввода (input)», value является свойством, хранящим значение, ассоциированное с данным i nput, то есть то, что ввел пользователь. Можно получить доступ к этому значению (с целью его передачи) и по-другому: <form name="myForm"> Вот чтобы не запутываться в этом длинном «пути» (document.myForm.phoneNumber), и используется указатель this. Объектная модель документа Ключевое слово this является скрытым предвестником целой концепции, которую нужно изучить, прежде чем продолжить разговор об обработке форм. Эта концепция сокращенно называется DOM (Document Object Model) и является своеобразным расширением и продолжением объектно-ориентированного подхода, речь о котором мы вели еще в главе 17. Она касается документов, которые создаются на XHTML и с которыми приходится работать при написании программ на JavaScript. По определению DOM является стандартом консорциума W3C, определяющим приемы управления объектами и изображениями на одной веб-странице. Вы только что рассмотрели пример работы этой модели. В самом последнем примере в качестве обработчика событий элемента <i nput> указывалось следующее: onchange="checkPhone Вся ссылка, начинающаяся со слова document, — это ссылка на объектную модель документа. Она начинается с самого общего, что есть в этой модели, — слова document, затем «закапывается» в глубь элементов, имеющихся в составе веб-страницы. Самым общим элементом из нужных нам является форма — объект myForm, а уже внутри него находятся все остальные объекты. phoneNumber содержит набор свойств конкретного <input>; свойство value является одним из них и хранит введенное пользователем значение. Оно-то нам и нужно. Таким образом мы прошли от самого общего к частному и построили указатель на требуемое значение. Оказывается, DOM позволяет работать с набором свойств и не передавать реальные значения при вызове функции. Листинг 18.1 служит тому примером. Обратите внимание: ни функции, ни ее вызову не требуются никакие параметры. Так как все данные формы хранятся в объектной модели документа, доступ к любому элементу которой можно получить очень просто, нужно лишь использовать корректный синтаксис. Листинг 18.1. Непосредственная работа с объектами веб-документа <!DOCTYPE html PUBLIC "\//W3C//DTD XHTML Можете просто записать этот код в HTML-файл и убедиться в том, что все действительно работает. Каким же образом это происходит? 1. Пользователь вводит число в поле ввода userEntry. 2. При нажатии кнопки «Счет» запускается функция compute(). 3. Функция находит по ссылке значение, введенное пользователем, и присваивает его переменной myNum. Затем с помощью встроенной функции eval () превращает myNum в число (поскольку поле текстовое и изначально переменная представляет собой просто набор символов, даже если это цифры). 4. Производятся какие-то арифметические операции, ответ сохраняется в переменной myResult. 5. Значение myResult присваивается свойству value текстового поля result, расположенного на второй строке формы. Ответ появляется в поле автоматически. (В браузере это выглядит точно так же, как на рис. 18.1.) Существует один момент, за которым нужно следить при работе над такого рода скриптами. Он касается того, когда следует использовать свойство value, а когда нет. Обычно если вы хотите присвоить какое-то значение элементу формы, то вам оно просто необходимо. Потому что с поименованным элементом (например, userln-put) связано больше чем просто значение. У него есть, например, type, установленный в элементе <i nput>. Поэтому нельзя просто так взять и написать document. form, user Input = x, поскольку userlnput — это объект, а не свойство. ПРИМЕЧАНИЕ Стандарт DOM был принят консорциумом WWW совсем недавно, поэтому Internet Explorer, Netscape и другие браузеры несколько по-разному реализуют его. В тексте этой главы я буду стараться использовать только кросс-платформенные средства объектной модели документов (ну, по крайней мере те, которые работают и в IE, и в Netscape). Тем не менее в главе 19 будут обсуждаться различные платформозависимые элементы DHTML. Область действия и указатели Один из вопросов, традиционно вызывающих затруднения при использовании DOM, является написание полных путей к объектам. В общем случае нужно начинать, как уже говорилось, с самого общего, что может быть, и затем продвигаться до нужного элемента, не пропуская ничего. Уровни объектов отделяются при этом точками. Но на самом деле мы уже видели пример использования более короткого пути. Объектом самого высокого уровня обычно является окно, window. Поэтому, если бы мы честно использовали самый полный путь, нам следовало бы во всех предыдущих примерах начинать именно с него. Тогда указатели выглядели бы еще длиннее. Например: window. document. myForm. userEntry.value. Но оказывается, что у всех этих путей есть некое общее свойство — они все имеют определенную область действия. Это означает, что, находясь на некотором виртуальном уровне объектов, можно часть пути отбросить, поскольку она в данном «месте» просто не актуальна. Это должно вам напомнить наш старый разговор о полных и сокращенных URL. Поскольку наши скрипты не влияют на окно браузера и мы находимся не на уровне «окон», а на уровне документов, то слово window в наших ссылках мы спокойно опускаем. Окно при этом считается текущим. Вслед за вопросом областей действия возникает вопрос указателей. По определению, указатель — это переменная, содержащая адрес объекта. Указатели значительно упрощают систему доступа к различным переменным: function computed() Мы немного изменили листинг 18.1 и определили объект theForm для document.myForm во всех ссылках на объекты. Эти присваивания тем не менее не будут встречаться часто. Наоборот, слезует создать ссылку для транзакций между вызовом функции и самой функцией. Для начала приведу пример вызова функции: <form name="myForm">
Дата добавления: 2014-12-29; Просмотров: 379; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |