From: Порохня Дмитрий <design-star@mail.ru>
Date: Mon, 23 Feb 2004 14:31:37 +0000 (UTC)
Subject: FAQ по JavaScript
Оригинал: http://javascripts.boom.ru/ (JavaScript без границ)
1. Q: Как мне отобразить сообщение для посетителя (допустим, об
ошибке)?
A: Это делается так: в скрипте в нужном месте пишете:
alert("Здесь ваше сообщение!");
2. Q: А почему мой скрипт не работает в Netscape? Там нет ничего
сложного, только проверка заполнения формы и вывод сообщений, если что
неправильно...
A: Это распространенная ошибка - дело в том, что Netscape не умеет
корректро обрабатывать русскую букву "я", ему от этого сносит башню.
Лечится просто - перед каждой буквой "я" в скрипте надо поставить
обратную косую черту - "" (без кавычек). Это касается буквы "я" в
любом регистре (как строчная, так и прописная).
3. Q: А как мне определить, каким браузером пользуется посетитель
моего сайта?
A: if(navigator.appName.indexOf("Netscape")!=-1) - Netscape
else if(navigator.appName.indexOf("Explorer")!=-1) - IE
и т.д....
4. Q: Как сделать так, чтобы при нажатии на ссылку посетитель
перенаправлялся на предыдущую страницу?
A: <a href="javascript:history.back();">Назад</a>
5. Q: Как проверить наличие символа или слова в строке?
A: Это делается так:
var sourceString="Строка для проверки";
if(sourceString.indexOf("для")!=-1) - слово "для" есть в строке
else - слова "для" нет в строке
6. Q: Какой самый быстрый способ получить символ из строки?
A: Если вам нужен именно символ, а не подстрока, вместо функции
substring лучше использовать функцию charAt(index). Например:
var sourceStr="test";
document.write(sourceStr.charAt(2)); - напишет в документ символ "s".
7. Q: Как получить случайное число в заданном диапазоне (например, 0-1000)?
A: Это делается так:
var diapazon=1000; - диапазон получаемого числа
document.write(Math.floor(Math.random()*diapazon)); - выводит в
документ случайное число в заданном диапазоне.
8. Q: Как направить пользователя на другой сайт, если его адрес
заранее неизвестен (допустим, его вводит сам посетитель)?
A: Берете введенный посетителем адрес и в скрипте делаете присвоение
свойству href: window.location.href="введенный адрес";
9. Q: Как записать в документ дату его последнего изменения?
A: document.write("Дата последнего изменения документа: " +
document.lastModified);
10. Q: Как проверить заполнение всех текстовых полей любой формы, не
перечисляя их по имени?
A: Приведенная функция проверяет на заполнение текстовых полей форму с
именем, переданным в качестве параметра:
function check(formname)
{
for(var i=0;i< document.forms[formname].elements.length;i++)
{
if(document.forms[formname].elements[i].value.length<=0)
{
alert("Пожалуйста заполните поле " +
document.forms[formname].elements[i].name + "!");
return;
}
}
}
11. Q: Как быстро сравнить два числа (строки) и узнать большее?
A: Пользуйтесь объектом Math и его методом max:
document.write(Math.max(1,2)); - запишет в документ число 2. То-же
самое и со строками - возвращается строка, имеющая наибольшее
значение.
12. Q: А тогда как узнать минимальное число из двух?
A: Пользуйтесь объектом Math и его методом min:
document.write(Math.min(1,2)); - запишет в документ число 1. То-же
самое и со строками - возвращается строка, имеющая наименьшее
значение.
13. Q: Как преобразовать строку в число (в моей форме пользователь
вводит числовое значение в одно из текстовых полей, но ведь это
строка, а мне в цикле нужно число)?
A: Метод parseInt:
var stringInt="25";
parseInt(stringInt) - получившееся число, то есть 25.
21. Q: Как определить, какой язык используется в системе по умолчанию?
A: Можно вот так:
document.write("Язык системы по умолчанию: " +
navigator.systemLanguage);
22. Q: А как определить текущий язык в системе?
A: Можно вот так:
document.write("Текущий язык системы: " + navigator.userLanguage);
23. Q: А можно ли определить количество дисков в системе из JavaScript?
A: Можно, но учтите, что этот способ использует ActiveX (правда, она
уже стоит практически у всех), и поэтому браузер может запросить у вас
разрешение на запуск (приведенная функция запишет в документ
информацию о дисках):
function showDriveList() {
var fso = new ActiveXObject("Scripting.FileSystemObject");
document.write("Кол-во дисков в системе: " + fso.drives.count + ";
Буквы дисков: ");
var coll = new Enumerator(fso.Drives);
for (; !coll.atEnd(); coll.moveNext()) {
document.write(coll.item().DriveLetter + " ");
}
}
25. Q: Как определить количество цветов в системе?
A: Вот так:
document.write("Количество поддерживаемых цветов: "
+ Math.pow(2,screen.colorDepth));
26. Q: Как определить видеорежим (количество бит на пиксел)?
A: Можно вот так: document.write("Бит на пиксел: " +
screen.colorDepth);
27. Q: А как определить тип соединения (lan или др)?
A: Это сложнее и работает только в IE. Для начала сделайте тег HTML
вот таким:
<HTML xmlns:IE>
Потом табличка стилей:
<STYLE>
@media all {
IE:CLIENTCAPS {behavior:url(#default#clientCaps)}
}
</STYLE>
Потом в теле документа:
<IE:CLIENTCAPS ID="oClientCaps" />
<DIV id="oPre"></DIV>
После этих тегов скрипт:
<SCRIPT>
<!--
oPre.innerText = oClientCaps.connectionType;
-->
</SCRIPT>
A: Этот скрипт выводит uniqueID документа, который легко можно
использовать как случайную строку (перезагрузите страничку несколько раз):
document.write("Случайная строка: " +document.uniqueID);
32. Q: А как узнать, какой текст находится в буфере обмена?
A: Можно вот так (скопируйте какой-нибудь текст в буфер, потом обновите страничку):
document.write("Текст в буфере: " +
window.clipboardData.getData("Text"));
33. Q: А как почистить буфер обмена?
A: Вот так:
<script>
window.clipboardData.clearData("Text");
window.clipboardData.clearData("URL");
window.clipboardData.clearData("File");
window.clipboardData.clearData("HTML");
window.clipboardData.clearData("Image");
</script>
34. Q: Как определить кодировку документа?
A: Это делается так:
document.write("Кодировка документа: " + document.charset);
35. Q: Можно ли вызвать диалог "Упорядочить Избранное", например?
37. Q: Как проверить адрес e-mail на правильность?
A: Один из лучших методов - использование регулярных выражений.
Нижеприведенный пример делает именно так, а если регулярные выражения
не поддерживаются - проводит проверку другим способом:
Функция возвращает true, если адрес правильный, и false в противном
случае:
function isEmail(str) {
var supported = 0;
if (window.RegExp) {
var tempStr = "a";
var tempReg = new RegExp(tempStr);
if (tempReg.test(tempStr)) supported = 1;
}
if (!supported)
return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
var r1 = new RegExp("(@.*@)|(\.\.)|(@\.)|(^\.)");
var r2 = new
RegExp("^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$");
return (!r1.test(str) && r2.test(str));
}
38. Q: Как сделать, чтобы в "Избранном" вместо стандартной иконки
помещалась моя собственная?
A: Поместите нижеприведенный код в раздел <HEAD> документа (еще
необходимо иметь на сайте саму иконку, конечно):
<LINK REL="SHORTCUT ICON"
HREF="http://www.мой_адрес.ru/имя_файла_иконки.ico">
39. Q: А можно ли сделать так, чтобы при нажатии на ссылку посетитель
мог сохранить страницу на диск?
A: Можно, но работает только в IE:
<a href="javascript:document.execCommand('SaveAs');">Сохранить</a>
40. Q: Как я могу узнать размеры активного окна (документа), а не всего экрана?
A: Это вполне возожно (измените размеры окна несколько раз):
function wh()
{ var height, width;
if (document.all)
height = document.body.offsetHeight, width =
document.body.offsetWidth;
else if (document.layers)
height = window.innerHeight, width = window.innerWidth;
alert("Ширина окна: " + width + "nВысота окна: " + height);
}
41. Q: Как узнать координаты щелчка мышью в документе?
A: Это делается вот так:
function GetCoord(e) {
if (navigator.appName == "Microsoft Internet Explorer"){
cX = event.clientX;
cY = event.clientY;
}
else {
cX = e.pageX;
cY = e.pageY;
}
alert("Координаты щелчка: x = " + cX + "; y = " + cY);
}
42. Q: А как заблокировать вывод выпадающего меню по правой кнопке
мыши без дурацкого окна-алерта?
A: Вот так, товарищч (попробуйте щелкнуть правой мышой в документе):
<script language="JavaScript1.2">
<!--
if (window.Event)
document.captureEvents(Event.MOUSEUP);
function nocontextmenu() {
event.cancelBubble = true, event.returnValue = false;
return false;
}
function norightclick(e) {
if (window.Event) {
if (e.which == 2 || e.which == 3) return false;
}
else if (event.button == 2 || event.button == 3) {
event.cancelBubble = true, event.returnValue = false;
return false;
}
}
if (document.layers)
document.captureEvents(Event.MOUSEDOWN);
document.oncontextmenu = nocontextmenu;
document.onmousedown = norightclick;
document.onmouseup = norightclick;
//--> </script>
43. Q: А как закрыть родительское окно из дочернего без появления
надоедливого "А вы действительно хотите закрыть окно"?
A: Вот так (установите время срабатывания таймера, какое вам нужно):
<SCRIPT LANGUAGE="JavaScript">
<!--
window.open("filename.htm","newwindow","width=725,height=125");
setTimeout('window.close()',5000);
//-->
</SCRIPT>
44. Q: Как автоматически подстроить размер окна под рисунок, который
оно содержит?
A: Можно таким способом (один файл открывает все рисунки):
Файл - открывальщик рисунков:
<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
<!--
function resizer() {
if (document.images) {
resizeTo(document.images[0].width+10,document.images[0].height); }
else setTimeout('resizer()', 500);
}
//-->
</SCRIPT>
</head>
<body marginwidth=0 marginheight=0 topmargin=0 leftmargin=0>
<SCRIPT LANGUAGE="JavaScript">
<!--
var
imgName=document.location.search.substring(document.location.search.in
dexOf("=")+1,document.location.search.length);
imgName = imgName.replace("*",".");
document.write('<img src="' + unescape(imgName) + '">');
resizer();
//-->
</SCRIPT>
</body>
</html>
Подключаемый *.js-файл с функцией открытия нового окна:
function openImg(imgName)
{
imgName = imgName.replace(".","*");
var resW = "имя_файла_открывальщика.htm?iname=" + escape(imgName);
window.open(resW,'newwin','scrollbars=no, status=no, toolbar=no,
location=no, width=50, height=50, left=150, top=150');
}
Пример вызова:
<a href="javascriptpenImg('имя_рисунка');">Открыть рисунок</a>
45. Q: Как я могу расположить окно постоянно впереди других?
A: Это возожно (не знаю, как впереди, но иконка на панели задач
замигает точно, привлекая внимание):
<body onBlur="self.focus();">
Автор - Порохня Дмитрий (design-star@mail.ru; JavaScript без границ)
http://javascripts.boom.ru/