Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lesson 6.doc
Скачиваний:
7
Добавлен:
23.09.2019
Размер:
386.56 Кб
Скачать

2.4. События, о которых не было сказано

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

onchange – обработчик события, который активируется, когда Вы изменяете содержимое текстового элемента или текстовой области (<TEXTAREA>), это удобно, когда нужно сделать проверку на правильность заполнения поля, потому что это событие вызывается, если поле было изменено и тогда, когда от него теряется фокус – то, что нужно для проверки. 

onselect – обработчик события выбора текста. То есть это событие происходит, когда пользователь пытается выделить текст в текстовом элементе или текстовой области. Обычно используется при создании текстовых редакторов на веб-странице, когда требуется изменять выделенный объект. Но получить выделенный объект, а тем более изменить его – не простая задача, хотя бы, потому что этот процесс работает по-разному в некоторых браузерах.

onerror – обработчик события error, которое возникает при ошибке загрузки документа или изображения (то есть onerror это атрибут тегов <body> и <img>). Оно возникает при синтаксической ошибке JavaScript-кода (но Вы ведь не будете специально делать в нем ошибки). Либо ошибкой времени выполнения, например, если Ваш скрипт выполняет какие-либо вычисления и у Вас по ошибке получится так, что некое число будет делиться на ноль, а это недопустимо – это и есть одна из ошибок времени выполнения. 

Так же не забывайте, что мы привели лишь по одному примеру из десятков возможных на каждое событие. Здесь главное Ваша фантазия и навыки. Например, события mouseout, mouseover, mouseup, mousedown часто используются для создания выпадающих меню и других визуальных эффектов, но это весьма трудный материал, который требует более глубоких знаний, причем не одного JavaScript. 

3. Return к функциям (функции и события)

Данный раздел подразумевает, что мы вернемся к функциям и найдем им применение в событиях.

Помните, следующий пример:

<html>         <body>                 <input id="text" type="text" style="color: grey; font-size: small; font-style: italic; width: 200px; height: 20px;" value="Введите текст" onFocus="if(this.value == 'Введите текст') {this.value=''; this.style.color='black'; this.style.fontSize='normal'; this.style.fontStyle='normal';}" onBlur="if(this.value == '') {this.value='Введите текст'; this.style.color='grey'; this.style.fontSize='small'; this.style.fontStyle='italic';}" />          </body> </html>

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

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

function clean() {        element = document.getElementById('text');         if(element.value == 'Введите текст') {                element.value = '';                 element.style.color = 'black';                 element.style.fontSize = 'normal';                 element.style.fontStyle = 'normal';         } }

А теперь напишем функцию, которая будет делать все наоборот: выводить текст в текстовом поле, если оно не заполнено и предлагать заполнить его:

function fill() {        element = document.getElementById('text');         if(element.value == '') {                element.value = 'Введите текст';                 element.style.color = 'grey';                 element.style.fontSize = 'small';                 element.style.fontStyle = 'italic';         } }

Да, а теперь давайте привяжем данные функции к определенным событиям на странице, и это будет проще простого:

<html>         <head>                 <script>                         function clean() {                                 var element = document.getElementById('text');                                 if(element.value == 'Введите текст') {                                        element.value = '';                                         element.style.color = 'black';                                         element.style.fontSize = 'normal';                                         element.style.fontStyle = 'normal';                                 }                         }                         function fill() {                                 var element = document.getElementById('text');                                 if(element.value == '') {                                        element.value = 'Введите текст';                                         element.style.color = 'grey';                                         element.style.fontSize = 'small';                                         element.style.fontStyle = 'italic';                                 }                                }                 </script>         </head>         <body onLoad="javascript: fill();">                 <input id="text" value="" type="text" style="width: 200px; height: 20px;" onFocus="javascript: clean();" onBlur="javascript: fill();" />          </body> </html>

Видите, как все стало намного проще. При загрузке страницы загружается текст, а при нажатии на текстовое поле он исчезает. А как реализуется вывод текста описано в блоке нашего скрипта.

Теперь наша задача состоит в том, чтобы сократить наш код. Во-первых, мы можем воспользоваться this вместо document.getElementById. Но помните, что this создается в момент события, но не в самом обработчике-функции, поэтому this нужно передать внутрь функции. Посмотрите, как это нужно делать и возьмите себе на заметку:

<html>         <head>                 <script>                         function clean(element) {                                 if(element.value == 'Введите текст') {                                        element.value = '';                                         element.style.color = 'black';                                         element.style.fontSize = 'normal';                                         element.style.fontStyle = 'normal';                                 }                         }                         function fill(element) {                                 if(element.value == '') {                                        element.value = 'Введите текст';                                         element.style.color = 'grey';                                         element.style.fontSize = 'small';                                         element.style.fontStyle = 'italic';                                 }                                }                 </script>         </head>         <body onLoad="javascript: fill(document.getElementById('text'));">                 <input id="text" value="" type="text" style="width: 200px; height: 20px;" onFocus="javascript: clean(this);" onBlur="javascript: fill(this);" />          </body> </html>

Единственное, что нужно сказать, это то, что в событии onLoad нельзя писать this, потому что this будет ссылкой на body, а нам нужно передать элемент text, который мы сможем получить при помощи document.getElementById.

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

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

<html>         <head>                 <script>                         var enterText = 'Введите текст...';

                        function changeStyle(element, value, color, fontSize, fontStyle) {                                 element.value = value;                                  element.style.color = color;                                  element.style.fontSize = fontSize;                                  element.style.fontStyle = fontStyle;                         }                                          function clean(element) {                                 if(element.value == enterText)                                          changeStyle('', 'black', 'normal', 'normal');                         }                         function fill(element) {                                 if(element.value == '')                                          changeStyle(enterText, 'grey', 'small', 'italic');                         }                 </script>         </head>         <body onLoad="javascript: fill(document.getElementById('text'));">                 <input id="text" value="" type="text" style="width: 200px; height: 20px;" onFocus="javascript: clean(this);" onBlur="javascript: fill(this);" />          </body> </html>

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]