I. Docs and Links

1) Hаталия Бельтикова, Ирина Кузина. Методы и функции JavaScript.
http://webims.virtualave.net/docs/js/jsrus/index.htm

2) Hебольшой справочник по JavaScript by Ataev RUSlan
http://gid.spb.ru/RUS/Java.htm

3) JavaScript Шаг за шагом by Андрей Кузин
http://www.mjk.msk.ru/~dron/html/js.shtml

http://www.javascript.com
http://www.javascript.ru
http://www.1001tutorials.com


II. General javascript

1. так, чтобы на событие onclick - фон менялся?

>> From: Vitaly Karmazinsky

<A HREF="http://www.yahoo.com" onMouseOver="document.bgColor='red'">Yahoo</a>

Будущий фон определяется между кавычками  ' '

red -  красный;
black - черный;
yellow - желтый;
white -  белый;
green - зеленый;
brown - коричневый;

bgColor - фон;
fgColor - текст;
linkColor - цвет ссылки;

>>From: Evgenij Koronin <koronin@yahoo.com>

<a href="javascript:document.bgColor='red'">change color</a>


2. Вобщем, надо если включен js показать один кусочек html кода, а если выключен другой.

From: "Michael A. Kangin" <mak@complife.net>

<script>
document.writeln('Один кусочек')
</script>
<noscript>
Другой кусочек
</noscript>


3. А как на JavaScript по гипеpccылке можно пеpедать паpаметp (напpимеp название файла) cо одной cтpанички на дpугую? Идея cоcтоит в том, чтобы cтpаничка pаботала по-pазному в завиcимоcти от того, откуда на неё вошли.

>> From: Michael A. Kangin

1. Откуда пришли на данную страничку, можно попробовать узнать по document.referrer

2. Параметры можно передавать как <a href="file.htm?parameter=value">, и вытаскивать их как parameter=document.location.search;


4.  Помню, что для того, чтобы пеpедать паpаметp, надо:
<A HREF="webpage.htm?param1=value1&param2=value2&...">ssd</A>
А вот как добыть значения паpаметpов, не помню.

>>From: Evgenij Koronin <koronin@yahoo.com>

Modified code taken from MSTV OneWorld UI
----------------------------------------------
var QueryString = new Array();
QueryString["_"]="";

function unspace( qs_element ) {
 return qs_element.split( '+' ).join( ' ' );
}

if ( location.search.length > 1 ) {
 var qs_query = location.search.substring( 1, location.search.length );
 var qs_pairs = qs_query.split( '&' );

 for ( var qs_index = 0; qs_index < qs_pairs.length; qs_index++ ) {
  var qs_element = qs_pairs[qs_index].split( '=' );
  QueryString[qs_element[0]] = unspace( unescape( qs_element[1] ) );
 }
}
----------------------------------------------
использовать:  var myVar = QueryString["parameter"];


5. пoдcкaжитe plz кaк cдeлaть в html ccылкy кoтopaя бы paбoтaлa кaк кнoпкa back в бpoyзepe

>> From: Igor Kanshin

<a href="JavaScript:history.back()">Back</a>


6. Пpедположим надо создать новое окошко, но не на основе yже сyществyющего html-файла, а сфоpмиpовать его на JavaScript и потом yже откpыть в новом окне.

>> From: Andrew Konovalov

newWindow = window.open(...);
newWindow.document.write(...);

>>From: Evgenij Koronin <koronin@yahoo.com>

newWindow = window.open("");
s=your_html;
with (newWindow.document)
{
 open();
 write(s);
 close();
}


7. А как можно загрузить картинку до того, как начнёт загружаться остальная часть страницы?

>> From: V.Kobychev

<html><head>
<script LANGUAGE="JavaScript">
<!--
function PreloadImages()
{
 if (document.images)
 {
  var imgFiles = PreloadImages.arguments;
  var preloadArray = new Array();
  for (var i=0; i<imgFiles.length; i++)
  {
   preloadArray[i] = new Image;
   preloadArray[i].src = imgFiles[i];
  }
  }
}
PreloadImages('picture1.jpg','picture2.jpg','picture3.gif'); // и еще сколько угодно картинок
// -->
</script>
<body>
....
</body>
</html>

8. Как этой хpенью пользоваться????? Hаписанно window.opener.ля-ля ;((

>> From: Vitaly Karmazinsky

window.opener.document.my_form.my_element.value = 'test';

Вот таким кодом можно вставить данные в форму
родительского окна. Работает везде.


III. Browser, mouse buttons, cookies, new windows etc.

1.у кого-нибудь есть универсальный код работы с subj (функции типа setcookie, getcookie, killcookie..... )

>>From: Evgenij Koronin <koronin@yahoo.com>

//---------------------------------------------------------------------
// Function to return the value of the cookie specified by "name".

// Parameter:
//     name     String object containing the cookie name.

// Return:      String object containing the cookie value, or null if
//              the cookie does not exist.
//---------------------------------------------------------------------
function GetCookie (name)
{
    var arg  = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i    = 0;

    while (i < clen)
    {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
          return getCookieVal (j);
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return null;
}
//---------------------------------------------------------------------
// Function to get a cookie.
//---------------------------------------------------------------------
function getCookieVal( offset )
{
    var endstr = document.cookie.indexOf (";", offset);

    if (endstr == -1)
        endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
}
//---------------------------------------------------------------------
// Function to set a cookie.
//---------------------------------------------------------------------
function SetCookie( name, value )
{
    var argv    = SetCookie.arguments;
    var argc    = SetCookie.arguments.length;
    var expires = (argc > 2) ? argv[2] : null;
    var path    = (argc > 3) ? argv[3] : null;
    var domain  = (argc > 4) ? argv[4] : null;
    var secure  = (argc > 5) ? argv[5] : false;

    document.cookie =
        name + "=" + escape (value) +
        ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
        ((path == null) ? "" : ("; path=" + path)) +
        ((domain == null) ? "" : ("; domain=" + domain)) +
        ((secure == true) ? "; secure" : "");
}
//---------------------------------------------------------------------
// Function to delete a cookie. (Sets expiration date)
//    name - String object containing the cookie name
//---------------------------------------------------------------------
function DeleteCookie (name)
{
    var exp  = new Date();
    var cval = GetCookie (name);

    exp.setTime (exp.getTime() - 1);  // This cookie is history
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

>> From: Vitaly Vasilchuk

<script language="JavaScript">
<!--
// разобрать значение ключа
function extractCookieValue(val) {
  if ((endOfCookie = document.cookie.indexOf(";", val)) == -1) {
    endOfCookie = document.cookie.length;
  }
  return unescape(document.cookie.substring(val, endOfCookie)) ;
}

// чтение ключа
function ReadCookie(cookiename) {
  var numOfCookies = document.cookie.length;
  var nameOfCookie = cookiename + "=";
  var cookieLen = nameOfCookie.length;
  var x = 0 ;
  while (x <= numOfCookies) {
    var y = (x + cookieLen);
    if (document.cookie.substring(x, y) == nameOfCookie)
      return (extractCookieValue(y));
      x = document.cookie.indexOf(" ", x) + 1;
    if (x == 0)
      break;
  }
  return "";
}

// создание ключа
// для удаления - expiredays = -1
function createCookie(name, value, expiredays) {

var todayDate = new Date();
todayDate.setDate(todayDate.getDate() + expiredays);
document.cookie = name +
                  "=" +
                  value +
                  "; expires=" +
    todayDate.toGMTString() +
    ";"
}

// пример загрузки
function LoadCookies() {
  document.forms[0].UserName.value=ReadCookie("UserName");
}

// пример сохранения
function SaveCookies() {
  createCookie("UserName", document.forms[0].UserName.value, 30);
}

//-->
</script>


2. пример скрипта запрещения работы правой кнопки мыши.

>> From: Oleg Arkhipov <arol@hippo.ru>

<html>
<head>

<script LANGUAGE="JavaScript1.1">
<!-- Begin
 function right(e) {
  if (navigator.appName == 'Netscape' &&
                             (e.which == 3 || e.which == 2)) {
   alert("Sorry, you do not have permission to right click.");
   return false;
  } else if (navigator.appName == 'Microsoft Internet Explorer' &&
                          (event.button == 2 || event.button == 3)) {
   alert("Sorry, you do not have permission to right click.");
   return false;
  }
  return true;
}

document.onmousedown=right;
if (document.layers) window.captureEvents(Event.MOUSEDOWN);
window.onmousedown=right;
//  End -->
</script>
</head>
<body>

</body>
</html>


3. Хотелось бы знать как определить и можно ли вообще определить, какая кнопка нажата у мыши.

>> From: Evgenij Koronin

используй объект event
The Event Object is supported by both Internet Explorer 4.0 and Netscape
(from 3.0). Properties of the event object are available for every event
that occurs on every scriptable object within a document.

event.button
The button property contains an integer value which represents which of the
mouse buttons were used when the event occurred. The possible values are:

Value Button pressed
0 No mouse button pressed
1 Left mouse button pressed
2 Right mouse button pressed
4 Middle button pressed


4.  С этим вопросом я зашел несколько из далека. Конкретно, клиенту необходим интерфей типа WinApp, то есть popupMenu по правой кнопке мыши. Hа WebClub.ru я нашел кое-что, но там пример на VBScript и через скриплет. Хотелось бы как-нибудь по проще, по пролетарси, и на JavaScript.

>> From: Evgenij Koronin

Простейший пример:
<script>
<!--
function click() {
if (event.button==2) {
alert(Hello')
}
document.onmousedown=click
///-->


теперь смотри,вместо алерта можно вызывать функцию, по коорой будет
показываться слой с линками (графика или еще что - в нем еще можно подсветку
сделать - это уже отдельный вопрос). В слое короче и будет меню, главное
поиметь координаты мыши через тот же объект event и слой отпозиционировать
на эти координаты. - все. Да - под HH надо будет использовать
document.captureEvent(MOUSEDOWN) - посмотри HH доку, а то ИЕ понимает, что у
документа есть onmousedown, а HH  без этого  - нет.
И почитай внимательно про event handlers. - в конце функции, по моему надо
возвратить false - тогда само меню оригинальное не будет выдаваться.

Да совсем забыл - различия ИЕ и HH
for IE
event.button
event.x
event.y

for NN
event.which
event.pageX
event.pageY


5.Не мог бы ты привести пример скриптика, который бы текстом писал online или offline?

>> From: Evgenij Koronin

Как два пальца - вот, у меня пишет

<html>
<head><title> Online test </title>
</head>

<body>
Internet Explorer in <B>
<script language="javascript1.2">
<!--
if (document.all)
 document.write(navigator.onLine?"online":"offline");
// -->
</script>
</B> mode
</body>
</html>

6. Распечатка страницы из кода

>>From: Nikolay Pichtin

Это попробуйте.

 <SCRIPT>
 function displayPrintButton() {
   if ((navigator.appName.indexOf("Netscape") > -1 &&
      parseInt(navigator.appVersion) >= 4) ||
      (navigator.appName.indexOf("Microsoft") > -1 &&
       parseInt(navigator.appVersion) >= 4) ) {
       document.write
        ("<FORM><INPUT TYPE=button VALUE='Print'
        ("<FORM>onClick='printCurrentPage();'></FORM>");
        }
    }

 function printCurrentPage() {
    if (navigator.appName.indexOf("Microsoft") > -1 &&
        navigator.appVersion.indexOf("5.") == -1) {
       // IE4
       OLECMDID_PRINT = 6;
       OLECMDEXECOPT_DONTPROMPTUSER = 2;
       OLECMDEXECOPT_PROMPTUSER = 1;
       WebBrowser =
        '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0
CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
       document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
       WebBrowser1.ExecWB(OLECMDID_PRINT,   OLECMDEXECOPT_PROMPTUSER);
       WebBrowser1.outerHTML = "";
      }
    else {
      // N4 IE5
      window.print();
      }
    }

    displayPrintButton();
    </SCRIPT>


IV. HTML tags, FORMs, FRAMEs

1.Есть фоpма в котоpой два меню выбоpа - пеpвое гpуппа товаpов, втоpое - список товаpов. Вопpос как сделать что-бы во втоpом меню выходили только товаpы конкpетной гpуппы товаpов?

>>From: "Michael A. Kangin" <mak@complife.net>

-----------------------
<html>

<script>
var tovar = new Array(4)

tovar[1]= new Array(
"Гробы",
"Венки",
"Катафалки",
"Отпевания",
"Памятники",
"Кресты"
)

tovar[2]=new Array(
"Компьютеры большие",
"Компьютеры маленькие",
"Винтчестеры",
"Каркуляторы"
)

tovar[3]=new Array(
"Окна",
"Двери",
"Слова",
"Тараканы",
"Жуки",
"Клопы"
)

tovar[4]=new Array(
"Шампунь",
"Крем",
"Мазь"
)

function update_s2()
{
n=document.f1.s1.selectedIndex + 1;
document.f1.s2.length=tovar[n].length;
for(i=0; i<tovar[n].length; i++) document.f1.s2[i].text = tovar[n][i];
}
</script>

<body>

<form name="f1">

<table border=0 width=100%>
<tr valign=top><td>
Фирма<br>

 <select name="s1" size=4 onChange="update_s2()">
  <option selected>Бензенчук и К
  <option>IBM
  <option>Microsoft
  <option>ПРоктер и гембл
 </select>

</td>
<td>
Товар:<br>

 <select name="s2" size=7 width=200>
  <script>
  for(i=0; i<tovar[1].length; i++) document.writeln('<option>'+tovar[1][i]);
  </script>
 </select>

</td></tr>
</table>
</form>

</body>
</html>
-------------------------------------------------

Работает как минимум в MIE5 и Hетскапе 4.08. Хотя МИЕ как-то странно
реагирует
на
изменение значений, передергивает все поле выбора. Может, пофиксить и можно,
не
разбирался.


2. можно ли вызывать яваскpипт помещенный в один файлик (фpейм) из дpугих фpеймов... если можно, то как?

>> From: Artem Babadzhanyants

Текст скрипта пишешь в отдельном файле, а на страничке пишешь:

<HTML>
<SCRIPT LANGUAGE="JavaScript" SRC="b5bbs.js">
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript" SRC="link.js">
</SCRIPT>
</HTML>

т.е мои скрипты находятся в файлах b5bbs.js и link.js


3. Есть 2 фpейма баннеp и основной, надо зделать так чтобы пpи клике на кнопкy(pисyнок,ссылкy)в вpейме с банеpом фpейм закpылся и остался только основной. Помогите плиз..

>> From: Alexander Hritonenkov

<A HREF="..." TARGET="_parent">...</A>
или
<A HREF="..." TARGET="_top">...</A>


4. Вот так получаются ЧАСЫ

>> From: Anton Agapov

<FORM NAME="clock">
 <INPUT NAME="face" TYPE="TEXT" VALUE="hh:mm:ss" SIZE=6>
 </FORM>
 <SCRIPT LANGUAGE="JavaScript">
 <!--
 updateClock();

 function updateClock() {
     var time = new Date();
     var hours = time.getHours();
     var minutes = time.getMinutes();
     var seconds = time.getSeconds();
     document.clock.face.value =
                                 ((hours < 10) ? '0' + hours : hours) +
                           ':' + ((minutes < 10) ? '0' + minutes : minutes)
+
                           ':' + ((seconds < 10) ? '0' + seconds : seconds);
     setTimeout("updateClock()",1000);
 }
//-->
</SCRIPT>
<p>


5.Как сделать сабж, чтобы после нажатия на кнопку "Submit" поля формы проверялись ява-скриптом, а потом только, если все формы заполнены так так надо, данные передавались серверу?

>> From: Vitaly Vasilchuk

В html'е, в форме, кнопка Submit, должна быть описана следующим образом
---------------------------------
<input type="button" value="Отправить"
 onclick="ConfirmBox(this.form, 'Вы действительно хотите отправить
запрос?')">
---------------------------------

а вот скрипт
---------------------------------
function ConfirmBox(f, message) {
  // проверка поля Sum
  if (f.Sum.value=="0") {
    // выводим сообщение об ошибке
    alert('Hеобходимо выбрать одну из задач.');
    // возвращаем фокус на форме в это место
    f.cb_MU.focus();
    return false;
  }

  // вывод запроса
  if (confirm(message)) {
    // если пользовать топчет "Yes" - отправляем
    f.submit();      <-- сам трюк
    return true;
  }
  else
    return false;
}


6.Кто-нибудь знает, как проиграть wav файл в Internet Explorere? (требуется звук при наведении мыши на объект)

>> From: Raidillon Eaurouge

Проверил в win98, IE5.0 (5.00.2614.3500)...
Работает!

<sample runsInIE5_0="yes">
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var strOver = "1.wav";
var strClick = "2.wav";
var a = new Array("never", "say", "die");

for (var i = 0; i < a.length; i++)
 document.writeln('<p><a href="#"'
  + ' onmouseover="soundIt(false)"'
  + ' onclick="soundIt(true)">'
  + a[i] + '</a></p>');

function soundIt(cause)
{
 sounder.src = (cause ? strClick : strOver);
}
//-->
</SCRIPT>
<bgsound id="sounder"/>
</BODY>
</HTML>
</sample>

>>From: Andrew Rousev

Из ClientGuide JS1.3:

   *JavaScript Methods for Controlling LiveAudio*

LiveAudio provides the following major JavaScript controlling methods. For
these methods to be available to JavaScript (and the web page), you must
embed
a LiveAudio console (any console will do, it can even be hidden) somewhere
on
your page.

play({loop[TRUE, FALSE or an INT]}, '{url_to_sound}')
pause()
stop()
StopAll()
start_time({number of seconds})
end_time({number of seconds})
setvol({percentage number - without "%" sign})
fade_to({volume percent to fade to, without the "%"})
fade_from_to({volume % start fade}, {volume % end fade})
start_at_beginning()
stop_at_end()

The following JavaScript state indication methods do not control the
LiveAudio
plug-in, but they give you information about the current state of the
plug-in:

IsReady
IsPlaying
IsPaused
GetVolume

---------
Using the LiveAudio LiveConnect Methods
One example of using JavaScript to control a LiveAudio plug-in is to have
JavaScript play a sound. In the following example, all of the HTML is needed
to
make the plug-in play a sound.

<HTML><BODY>
<EMBED SRC="sound1.wav"   HIDDEN=TRUE>
<A HREF="javascript:document.embeds[0].play(false)">Play the sound now!</A>
</BODY></HTML>

function Browser_getHostAddress(){
  if (navigator.appName.lastIndexOf('Netscape')!=-1)
    if(navigator.javaEnabled()==1){
      window.onerror=null;
      hostAddress=java.net.InetAddress.getLocalHost();
      return(hostAddress.getHostAddress());
    }
  return null;
}
var browser=new Browser();


V. Dynamic HTML, LAYERs, DIVs, DOM, CSS

1. Хотелось бы не забивать тэги JavaScript-овскими onMouseOver="..." и т.п., а просто цеплять CSS к  документу и все.

>>From: "Raidillon Eaurouge" <nero@iptelecom.net.ua> wrote in message

 <style>
 .umm {
  behavior: url('umm.htc')
 }
 </style>

 <component>
 <implements>
  <attach event="onmouseover" onevent="over()" />
  <attach event="onmouseout" onevent="out()" />
  <attach event="onclick" onevent="clika()" />
 </implements>
 </component>

> А если уже прописана куча частных случаев onmouseover() и onclick(), но
хочется
> ко всем сразу добавить и onfocus(), будет ли работать такая конструкция:
> <component>
> <implements>
> <attach event="onfocus" onevent="this.blur()" />
> </implements>

Будет работать, но в компонентах нужно использовать не "this",
а "element" для обращения к своим свойствам и методам -- element.blur().