Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: SteelRat от 30 Октября 2002, 17:19:05

Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 30 Октября 2002, 17:19:05
Ещё одна проблема с этим меню дуррацким...

Вообщнм, я делаю в ХТМЛ документе ссылки вида:

« Number 1


После чего появляется проблема:
Надо понять, где юзер навёл мыщь на ссылку, чтоб в той точке сделать подменюшку.
Сама подменюшка пашет. (к примеру, если жёстко задать координаты. [100*100, etc]).

Координаты я вычислял так:
    e=\'event\';
   mouseX = mouse_x_position = (bw.ie) ? (e.clientX + document.body.scrollLeft) : e.pageX;
   mouseY = mouse_y_position = (bw.ie) ? (e.clientY + document.body.scrollTop)  : e.pageY;

И так:

    mouseX=(bw.ns4 || bw.ns6)?e.pageX:event.x||event.clientX
    mouseY=(bw.ns4 || bw.ns6)?e.pageY:event.y||event.clientY

Итог один:
<<
Ошибка:event is not defined
In file:///home/steelrat/menu2.js, Line 140,
>>

Что делать?
Большое спасибо за ответ.
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 30 Октября 2002, 17:56:36
PS: Если попросить распечатать полученные mouseX,Y, то там undefinded
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 30 Октября 2002, 19:05:41
Проблема с event в Mozilla/Netscape, в IE всё впорядке.
Но там проблема как и в первом вопросе: Печатает текст с нуля. Т.е. вместо хтмл кода  документа document.write(varstring) выводит новое содержание, как бы в \'пустую страницу\'.
В прошлый раз я решил эту проблему методом тыка :-). Но надо знать точно, каким именно требованиям должен удовлетворять код в точке document.write().

Если поможет, URL: http://bonch.spb.ru/script.tar.gz

Жду ответа, сенькс.
Название: Ошибка:event is not defined //Error
Отправлено: mike от 30 Октября 2002, 19:40:09
Цитировать
Но там проблема как и в первом вопросе: Печатает текст с нуля.

В MSIE есть свойство innerHTML для любого объекта-тега. Прекрасно работает вместо document.write.

Например:

document.all["sometag"].innerHTML = "

text

";
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 30 Октября 2002, 20:01:05
Поддержка Mozilla/Netsсape должна быть обязательна.
Это не подходит.
А как именно вслой писать?
Если можно в слой писать, то может создать заранее 1н и вписывать в него?

Вообще, я по примеру dhtmlcentral.com делаю.
Там document.write() в библиотеке создания окон есть и работает.
У меня вроде как также, но всё таки не работает....

Такие дела...
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 30 Октября 2002, 20:04:26
Скрипт можно качнуть и заценить тут:
http://dhtmlcentral.com/script/script.asp?id=16
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 30 Октября 2002, 20:07:35
\'Всё в одном\' хтмл файле, без библиотек:
http://dhtmlcentral.com/script/script16_demo.html
Название: Ошибка:event is not defined //Error
Отправлено: mike от 30 Октября 2002, 20:32:32
Цитировать
Если можно в слой писать, то может создать заранее 1н и вписывать в него?

Я так и делал для NN.





Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 30 Октября 2002, 20:56:16
Спасибо! Буду пробовать.
Но всё-тки, как у dhtmlcentral удалось?
Во всех браузерах работает и не жалуется.
В чём хитрость?
Название: Ошибка:event is not defined //Error
Отправлено: mike от 30 Октября 2002, 21:53:50
Цитировать
Но всё-тки, как у dhtmlcentral удалось?

Возможно, ты не заметил :)
Они контент создают динамически. Т.е. пишут в документ во время его создания, а это совсем другое дело.

А насчет совместимости браузеров - там грамотный код под каждый тип браузеров. Нужно только (:D)разобраться...
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 30 Октября 2002, 22:36:22
Так я пытаюсь как раз так и сделать.
У меня большинство функций от их библиотеки.
Меню динамически создаются.
Точнее, пока слои с ними.
Но, если я помещаю часть вызова генерации окошек

onload=CreateMenuStructure(\'Menu\',2);

между и , печать призводится в пустой документ.
а если перед то Mozilla/Netscape работаетбез вопросов, а IE ругается, хотя и работает после этого.

PS: Мне так и не удалось словить позицию мыши в Mozilla 1.0 (=Netscape 7.0).
Выдаёт undefined в качестве значения курсора и всё также жалуется на

<<
Ошибка:event is not defined
In file:///home/steelrat/menu2.js, Line 147,
>>
Пока стоит код для вычисления:

      if(bw.ns){
      mouseX=evt.pageX;
      mouseY=evt.pageY;
      }
      else if(bw.ns6){
      mouseX=event.x;
      mouseY=event.y;
      }
      else {
      mouseX=event.clientX;
      mouseY=event.clientY;
      }
      CurX=mouseX;
      CurY=mouseY;

Эффекта нет.
Под IE находит свои значения...

До текущего состояния архив скрипта обновлён, если что.
PS: Там koi8-r/Unix LF переход строки.
Всё-таки, я под линуксом..
Если надо - могу в винду конвертнуть.
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 31 Октября 2002, 16:44:30

lib_writeIt = function(text){
if(bw.ns4){
TempData=this.ref;
this.ref.open();
this.ref.write(TempData+text);
        this.ref.close()
}else TempData=this.evnt.innerHTML; this.evnt.innerHTML=TempData+text;
}

В итоге - пишется только последний слой.(у меня цикл функции, так что пишется несколько раз...). Я неверно читаю текущее содержание?
Название: Ошибка:event is not defined //Error
Отправлено: mike от 31 Октября 2002, 18:04:41
Можно вот так:

lib_writeIt = function(text){
if(bw.ns4){
TempData=this.ref; //работает?! Если да, то буду знать :)
this.ref.document.open();
this.ref.document.write(TempData+text);
                this.ref.document.close()
}else this.evnt.innerHTML += text;
}

Еще: для NN текст можно держать в статической переменной (не хочу обманывать насчет получения содержимого слоя в NN4 :))
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 31 Октября 2002, 18:38:08
У меня DOM браузер, так что о то работает это в NN4 я без понятия.
+= не помог ни в IE, ни в NN6-7
По любому, показывает только последний слой.
Название: Ошибка:event is not defined //Error
Отправлено: mike от 31 Октября 2002, 19:09:42
Цитировать
По любому, показывает только последний слой.

Тогда исходник нужно чуть подробней :) Но по смыслу, а не все подряд, плиз.
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 31 Октября 2002, 19:18:33
Чего-то не сходится с этим вписыванием...
Что надо, чтобы \'налету генерить\', чтобы document.write работал правильно?
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 31 Октября 2002, 19:41:53
Вообщем, я сделал а-ля dhtmlcentral.
Теперь проблема в том, чтоб закапчерить координаты события в NN6-7.
Я обращаюсь вроде правильно.(Во-первых взято с рабочего dhtmlcentral, во-вторых проверено по 2м книгам. IE- работает OK, NN6-7 нет. Тестю я на Браузере Galeon, который работает на движке Mozilla 1.0.0, из которой компилировали NN7 :-))
Исходник, перекодированный в win-1251 висит на http://bonch.spb.ru/script.tar.gz
Если надо, запакую в др. формат.
Винрар его открывает 100%.
PS:
Часть записи в слой сохранилась - lib_writeIt(text).
Для записи в ХТМЛ файле был создан

и init функция в ХТМЛ документе имела вид:


А в menu2.js
в функции addMenu_Item(...)
вместо document.write(str);
было oDivTemp.writeIt(str);

На этом отличия от текущего заканчиваются.
Название: Ошибка:event is not defined //Error
Отправлено: mike от 31 Октября 2002, 20:29:49
А откуда берется evt у тебя в коде?
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 31 Октября 2002, 21:01:40
Вообще-то я сам сейчас с этим разбираюсь.
В книге написано для ns4 evt.pageX, на dhtmlcentral e.pageX.
Я думал, что в книге дана правильная комбинация пути к событию, там насчёт того, что это ссылка - молчёк, а на dhtmlcentral - для совместимости.
Теперь, я впилил, что это ссылка на обьект, на котором произошло событие.
Теперь проблема в том, чтобы придумать к чему обращаться. Чтобы добыть координату.
Но на это я пока осо внимание не трачу, т.к. мой браузер определяется, как  ns6. Но при применении кода, не дающего браузеру гулять на evt.*:

 if(bw.ns){
mouseX=evt.pageX;
mouseY=evt.pageY;
}
else if(bw.ns6){
mouseX=event.x;
mouseY=event.y;
}
else {
mouseX=event.clientX;
mouseY=event.clientY;
}
CurX=mouseX;
CurY=mouseY;

Браузер ругается, что:

Ошибка:event is not defined
In file:///home/steelrat/menu2.js, Line 137,

Тут уже полная непонятка. event.x - правильное обращение. Или нет?
Чего-то я совсем запутался. Попробую ещё раз перекопать книги и код.

Если вы знаете как обратиться правильно. Опишите - буду вам очень признателен.

Да, в NN:
pageX - это для ява ниже 1.2, а screenX - =1.2? Какой из них правильнее юзать?
Название: Ошибка:event is not defined //Error
Отправлено: mike от 31 Октября 2002, 21:13:21
В исходниках dhtmlcentral
e (или evt в нашем случае) передается как параметр обработчику события. Перед этим нужно указать, какие события будут обрабатываться скриптом. Пример из документации по JS для NN:

HTML>...
Название: Ошибка:event is not defined //Error
Отправлено: SteelRat от 31 Октября 2002, 23:23:59
Спасибо! То, что надо! только onmousemove поставил на событие.
Ещё раз огромый респект и море благодарности.
Документация к NN  идёт вместе с NN?
Может, даже поставлю его, несмотря на ту кучу фигни, что в него пихают AOL\'щики.

Пойду доводить код... ;-). МОжет до конца недели успею.
Тут просто предод по информатике предложил в качестве практики сделать меню, понятное первокурсникам (основы dhtml). А я прошлой зимой \'окошки\' от дхтмлцентрал чуть ли не переписывал (чтоб при скорлинге окна ползли вниз тоже+ещё пару фич).. С готовым кодом это просто. Вот сейчас подумал, типа напишу на коленке за пол часа :-).  Уже вот третьи сутки танцую с бубном... :-)
Название: Ошибка:event is not defined //Error
Отправлено: mike от 01 Ноября 2002, 11:45:42
Цитировать
Документация к NN идёт вместе с NN?

Нет :) Документация к NN была на сайте http://developer.netscape.com/
Не знаю, есть ли она там сейчас. Должна быть, по идее :)
Название: Ошибка:event is not defined //Error
Отправлено: Oak от 01 Ноября 2002, 20:04:42
Есть ... по старому NN - 4
А с того же сайта уже многие ссылки (но не все) идут на mozilla.org

Хотя сравнения броузеров по прежнему на developer