После выхода второй статьи "Java Script спешит на помощь" на мой
почтовый ящик обрушился целый шквал писем с вопросами. После разбора
всех вопросов оказалось, что включение фрагментов кода на JS в документ
и динамическое создание страниц, конечно очень хорошо, но вебмастерам
хочется еще. Ну что ж спрос порождает предложение.
Чем же еще может порадовать старина JS сайтостроителей? Внешний код
подключаем, создаем динамические страницы, красота. Ну что еще желать?
А как насчет интерактивности? Что? Нет, чат на JS устраивать не будем.
Сегодня мы поговорим о динамическом изменении (!) кода.
В последние время в сети все чаще и чаще появляются некие калькуляторы.
Например, многие хостинговые компании предлагает вам калькулятор для
расчета стоимости услуг размещения сайта. Все что вам необходимо -
выбрать тариф, дополнительные услуги, ввести продолжительность хостинга
и нажать кнопку "Рассчитать". После чего вы моментально получаете
результат прямо на странице сайта хостера. Причем сама страница не
обновляется! Это простой пример динамического изменения кода.
Ладно, хватит разговоров, давайте перейдем непосредственно к примерам.
Для начала самый простой. Создайте новый HTML файл и пропишите в нем
следующий код:
<SCRIPT language=javascript>
function test_change ()
{
document.all.resultat.innerHTML="Спасибо!";
}
</SCRIPT>
<DIV id=resultat></DIV>
Теперь сохраните файл и откройте его браузером. Вы увидите кнопку с
надписью "Нажми на меня". Нажимайте, не бойтесь, баннеры не появятся ?.
Что мы видим? Код изменился. Под кнопкой появилась надпись "Спасибо!".
Содержание страницы изменилось. Но если вы загляните в файл с кодом, он
неизменен. Как такое возможно? Все очень просто. Дело в том, что JS
является client-side технологией. Т.е. он исполняется на машине
посетителя, а не на сервере. А теперь давайте разберемся с кодом. Итак,
с начала ничего нового не видим: форма с кнопкой, при клике на которую
исполняется функция "test_change”. Сама функция содержит одну - единую
строчку:
document.all.resultat.innerHTML="Спасибо!";
Это и есть команда JS на вставку. Все что остается добавить это место,
куда делать вставку. Место мы обозначили идентификатором "resultat".
Идентификатор вы можете изменять вольно по своему усмотрению. Теперь
создаем новый слой и связываем его с идентификатором "resultat":
<DIV id=resultat></DIV>
Ну как, неплохо? Сразу хочу вас обрадовать, динамически можно вставлять
не только простой текст, но и HTML теги! А теперь рассмотрим более
сложный пример. Создадим калькулятор, который по веденным данным
подсчитает вашу месячную зарплату ?. Итак создайте новый HTML файл и
наберите следующее:
<TABLE>
<FORM name=cash_form method=post>
<TR><TD>Оплата, $/час: <TD><INPUT size=10 name=Oplata></td></tr>
<TR><TD>Рабочих часов в день: <TD><INPUT size=10 name=Chasov></td></tr>
<TR><TD>Рабочих дней в месяц: <TD><INPUT size=10 name=Dney></td></tr>
<SCRIPT language=javascript>
function getmoney (dat1,dat2,dat3)
{
month=dat1*dat2*dat3;
document.all.resultat.innerHTML="За месяц Вы заработаете "+month+" $";
}
</SCRIPT>
<DIV id=resultat></DIV>
Сохраняем файл и открываем его браузером. Что мы видим? Три поля для
ввода и кнопку с надписью "Подсчитать", при клике на которую
запускается функция "getmoney". Она получает введенные значения,
вычисляет месячную зарплату и выводит ее в браузере. Введите значения и
нажмите кнопку "Подсчитать". Обратите внимание на значение месячной
зарплаты. А теперь измените одно или несколько введенных значений и
снова нажмите кнопку "Подсчитать". Как вы видите новое значение
заменило старое. Очень удобно. А можно, например, выводить новое
значение под старым, для этого нужно изменить строчку
document.all.resultat.innerHTML="За месяц Вы заработаете "+month+" $";
на
document.all.resultat.innerHTML=document.all.resultat.innerHTML+"За месяц Вы заработаете "+month+" $<br>";
Теперь новые данные будут прибавляться к более ранним, и все они вместе
будут выведены на экран. Обратите внимание на добавленный HTML тег
<br> в конце кода. Это перевод строки. Вот мы и протестировали
использование HTML кода в динамически изменяемых страницах.
Конечно, калькуляторы нужны далеко не каждому сайту. И правильно, не
стоит на одном зацикливаться. Подключите свое воображение. Возможность
динамически добавлять HTML код открывает воистину огромный потенциал
для разработчика. Конечно, меню на таком коде вряд ли сможет превзойти
выпадающее меню JS - кликать надоест. А вот для экономии места и для
организации пояснений к разным элементам сайта такие возможности JS
идеально подходят. Простой пример - страница контактов на сайте
компании. Там, как правило, размещена контактная информация компании,
дистрибьюторов, представителей, разработчика сайта. Куча адресов,
телефонов и e-mail'ов. Так и заблудиться можно. А вот если разместить
ссылки "Компания", "Дистрибьюторы", "Представители", "Разработчик",
посетитель быстро сориентируется и выберет нужную ссылку. Осталось
только написать JS код, который при клике на ссылку выводит под ссылкой
соответствующую информацию и убирал ранее выведеную. Многие могут
возразить, мол можно сделать просто ссылку на нужный файл и не нужно
динамическое изменение текущего. Но, во-первых, возможно посетитель
заинтересован не одной ссылкой - ему придется возвращаться, а
во-вторых, намного приятнее кликнуть и моментально (!!!) увидеть нужную
информацию (загруженную вместе со страницей), чем ожидать загрузку
очередной страницы. Давайте я дам простой примерчик, а разработка
подобного кода останется вам как домашнее задание для закрепления
материала. Итак, код:
<SCRIPT language=javascript>
function test_on_off (dat1)
{
if (dat1==1)
{document.all.resultat.innerHTML="<table
border=1><tr><td>Ура!
Работает!</td></tr></table>";}
else
{document.all.resultat.innerHTML="";}
}
</SCRIPT>
<DIV id=resultat></DIV>
При открытии файла, содержащего вышеуказанный код, в окне браузера
можно будет увидеть две кнопки: "Включить" и "Выключить". При клике на
первую из них функции "test_on_off" передается значение 1, а при клике
на вторую - 0. В зависимости от полученного значения функция
"test_on_off" либо выводит таблицу, либо убирает ее. Это лишь простой
пример. Его можно немного улучшить, убрав одну кнопку и подправив код: