Показаны сообщения с ярлыком javascript. Показать все сообщения
Показаны сообщения с ярлыком javascript. Показать все сообщения

пятница, 26 июня 2009 г.

Javascript и закрывающий тег </script>

На одной страничке проекта у меня есть javascript-код, который динамически создаёт другой javascript-код, добавляет его на страницу, после чего он выполняется. Новый код находится в тегах

<script type="text/javascript" language="javascript" >
</script>.

Так вот, почему-то (разбираться не стал) при объявлении строки

var tag ='</script>';

я получал ошибку, и сценарий выполняться не хотел. Решил задачу быстро и в лоб:

var tag ='</sc' + 'ript>';

четверг, 12 марта 2009 г.

JavaScript-программистам посвящается: $(document).ready

Эта запись скорее для меня и для моих знакомых javascript-программистов, чтоб не забывали:


Всю обработку DOM по изменению стилей элементов помещать в $(document).ready()


Сегодня 20 минут отлаживали и прыгали с бубном вокруг 10 строк кода, использующего jquery. Код всего лишь должен был взять высоту одного блока и установить значение высоты для другого равным первому. И всё. Скромно так и по-простому. Но не работало. А всё потому, что этот код обращался к DOM-структуре до её полной загрузки.

Товарища, который это сотворил, готов был загрызть, потому что код в ready он не поместил из-за, как ему казалось, и без того большого размера этой секции. Но загрызть хотел ещё и потому, что программист он сильный, но захотелось ему повыпендриваться.

пятница, 6 марта 2009 г.

JavaScript-программистам посвящается: обработчик клика

Очень часто javascript-программисту бывает нужно повесить обработчик на ссылку-изображение. И часто это делают так:


1 <a href="#" onclick="myClick();"><img src="pict.gif" alt="Link" /></a>



Не делайте так пожалуйста! Это нехорошо! Просто при первом клике по такой ссылке в браузере у человека прокрутится скроллбар и он перейдёт наверх страницы. Чтобы так не происходило, можно использовать такой код:



1 <a href="javascript: myClick();" ><img src="pict.gif" alt="Link" /></a>

четверг, 26 февраля 2009 г.

JavaScript-программистам посвящается: Scroll

Скроллинг списка бывает очень нужен, причём красивый скроллинг, который можно было бы украсить изображениями и анимационными эффектами. Flash/Flex использовать всего навсего из-за одного-двух блоков на сайте нет никакого желания. Вот из-за этого мне пришлось написать небольшой скрипт, который скроллит список. Украшается такая штука на ура.

Скрипт использует jquery для создания эффекта плавного появления. В этом примере от jquery пользы никакой, но поскольку я взял этот код из рабочего проекта, то менять его на getElementById мне было лень. Кому нужно сам разберётся какую строку нужно заменить. Demo тут.



 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>javascript scroll</title>
6 <script type="text/javascript" language="JavaScript" src="jquery.js"></script>
7 <script type="text/javascript" language="JavaScript">
8
9 var currentItem = 1;
10 /** Подняться на один пункт вверх. */
11 function up() {
12 if (currentItem == 1) {
13 return;
14 }
15
16 currentItem--;
17 $("#item-" + (currentItem + 3)).hide();
18 $("#item-" + currentItem).fadeIn(500);
19 }
20
21 /** Опуститься по списку на один пункт. */
22 function down() {
23 if (currentItem == 7) {
24 return;
25 }
26 currentItem++;
27 $("#item-" + (currentItem - 1)).hide();
28 $("#item-" + (currentItem + 2)).fadeIn(500);
29 }
30
31 </script>
32 </head>
33 <body>
34
35 <h1>javascript scroll</h1>
36 <ul>
37 <li id="item-1">item a</li>
38 <li id="item-2">item b</li>
39 <li id="item-3">item c</li>
40 <li id="item-4" style="display: none;">item d</li>
41 <li id="item-5" style="display: none;">item e</li>
42 <li id="item-6" style="display: none;">item f</li>
43 <li id="item-7" style="display: none;">item g</li>
44 <li id="item-8" style="display: none;">item h</li>
45 <li id="item-9" style="display: none;">item i</li>
46 </ul>
47
48 <a href="javascript: up();">вверх</a>
49 <a href="javascript: down();">вниз</a>
50
51 </body>
52 </html>

воскресенье, 8 февраля 2009 г.

JavaScript-программистам посвящается: локальные переменные

За последнее время написал немало, а прочёл ещё больше javascript-кода, как хорошего, так и плохого. Но самое большое впечатление на меня производит код, который не объявляет локальные переменные.
Итак, задача. Очень хочется вывести таблицу умножения для чисел от 0 до 9. Пишем код:

<body>
<div id="output">here</div>
<a href="javascript: putList();">Click</a>
</body>

function putList() {
text = "<ul>";
for (i = 0; i < 10; i++) {
text += "<li>" + putContent(i) + "</li>";
}
text += "</ul>";
document.getElementById('output').innerHTML = text;
}

function putContent(key) {
content = "";
for (i = 0; i < 10; i++) {
content += " " + i * key + " ";
}
return content;
}
И смотрим результат: 0 0 0 0 0 0 0 0 0 0 Как же так??? А где же таблица умножения!? Всё дело в том, что все переменные, используемые внутри функции и не объявленные при помощи var, помещаются в глобальное пространство имён. Таким образом обе эти функции используют одну и ту же переменную. После завершения работы putContent переменная i равна 10, и цикл в putList завершает свою работу. Чтобы код работал корректно, достаточно добавить var в объявления переменных.

function putList() {
var text = "<ul>";
for (var i = 0; i < 10; i++) {
text += "<li>" + putContent(i) + "</li>";
}
text += "</ul>";
document.getElementById('output').innerHTML = text;
}

function putContent(key) {
var content = "";
for (var i = 0; i < 10; i++) {
content += " " + i * key + " ";
}
return content;
}
И вот наша таблица умножения появляется по клику на ссылку.
Казалось бы, что может быть проще и элементарнее. НО! Об этом постоянно забывают и пишут код, который содержит логические ошибки, появление которых трудно предсказать.