Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№112-05-2006 15:16:42

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

списки JavaScript не работают в MoZILLA

Вставили в сайт Динамически заполняющийся список, в Эксплорере работает безупречно а в Mazilla,Opere,Netscape встаёт колом. Времени разбираться уже нет :dumb:. Может кому знакомо решение проблемы ? Ключевые места проблемы указаны в коде.Видимо Visibility="hidden". Буду благодарен.

<html>
<head>
<style>
        #sub1, #sub2, #sub
        { position: absolute;visibility: hidden;
          z-index: 3
        }
</style>

<SCRIPT LANGUAGE="JavaScript">

catnumber = 3
offset = 150
performOnchange = false
if (document.all) {
  docObj = "document.all."
  styleObj = ".style"
  } else {
  docObj = "document."
  styleObj = ""
}
function openselect(subcat) {
  popupselect = eval(docObj + subcat + styleObj)
  popupselect.visibility = "visible"
}
function closeselect(submenu,subcat){
  popupselect = eval(docObj + subcat + styleObj)
  if (submenu.selectedIndex != 0) {
    numchoice = submenu.selectedIndex
    choice = submenu[numchoice].value
    subform.otkuda.value = choice       //********* tchto to ne tak
  }
}
function closeselect1(submenu,subcat){
  popupselect = eval(docObj + subcat + styleObj)
  if (submenu.selectedIndex != 0) {
    numchoice = submenu.selectedIndex
    choice = submenu[numchoice].value
    subform.kuda.value = choice  //********* tchto to ne tak
  }
}
function lock() {
  performOnchange = false
}
function unlock() {
  performOnchange = true
}
function selectSub(cat) {
  for (i=1; i <= catnumber; i++) {
    subcat = "sub" + i
    popupselect = eval(docObj + subcat + styleObj)
    popupselect.visibility = "hidden" //*problemi s-    popupselect
  }
  if (performOnchange == true) {
    letsopen = "sub" + cat.selectedIndex
    if (letsopen == "sub0") {
      alert("No category selected")
      choice = "- subcategory -"
      subcategory.value = choice
      cat.focus()
      } else {
      openselect(letsopen)
      lock()
    }
  }
}
function selectSub1(cat) {
  for (i=1; i <= catnumber; i++) {
    subcat = "subq" + i
    popupselect = eval(docObj + subcat + styleObj)
    popupselect.visibility = "hidden"
  }
  if (performOnchange == true) {
    letsopen = "subq" + cat.selectedIndex
    if (letsopen == "subq0") {
      alert("No category selected")
      choice = "- subcategory -"
      subcategory.value = choice
      cat.focus()
      } else {
      openselect(letsopen)
      lock()
    }
  }
}
//  ***************Script End ************
</script>

</head>
<table><tr>
<body>
<form METHOD="POST" ACTION="zakaz.php" name="subform">
<div>
<table border="0" width="100%">
  <tr>
    <td width="100%">
      <table border="0" width="70%" cellspacing="5">
        <tr>

        </tr>
        <tr><td width="51%" align="center">
            <p align="left"><font face="Verdana,Tahoma,Arial" color="#000000" size="2"><b>Region</b></font></p>
        </td></tr>
        <tr>
             <td width="50%">

    <select name="categoria" Value="1" style="{border: inset 1px; background: #EEEEEE;}" onmouseover="unlock()"

onchange="selectSub(this)">
    <option selected value="">Vibrat region
    <option value="announce">Mosk.obl
    <option value="arts">Novg.obl
    <option value="software">Leningr.obl
  </select>
    <br>
        </td></tr>

  <tr><td width="51%">
<span id="sub1">
  <select name="sub" Value="1" style="{border: inset 1px; background: #EEEEEE;}" onchange="closeselect(this,'sub1')">
    <option selected value="">gorod
  <option value="Moskva">Moskva</option>
  <option value="Mitishi">Mitishi</option>
  <option value="Tver">Tver</option>
  </select>
</span>

<span id="sub2">
  <select name="sub" Value="1" style="{border: inset 1px; background: #EEEEEE;}" onchange="closeselect(this,'sub2')">
    <option selected value="">gorod
  <option value="Novgorod">Novgorod</option>
  <option value="Gorodok">Gorodok</option>
  <option value="Stancia">Stancia</option>
  </select>
</span>

<span id="sub3">
  <select name="sub" Value="1" style="{border: inset 1px; background: #EEEEEE;}" onchange="closeselect(this,'sub3')">
    <option selected value="">gorod
  <option value="Piter">Piter</option>
  <option value="Lodeika">Lodeika</option>
  <option value="Viborg">Viborg</option>
  </select>
</span>
     </td></tr>
</div>

</table>

<input type="submit" value=" OK " style="cursor:pointer;" class="but">
</form>
</body>
</html>

Отсутствует

 

№212-05-2006 16:42:46

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508

Re: списки JavaScript не работают в MoZILLA

Надо бы для Firefox и других современных браузеров добавить адресацию через document.getElementById()

Отсутствует

 

№312-05-2006 21:43:51

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: списки JavaScript не работают в MoZILLA

EdvardH пишет

...Ключевые места проблемы указаны в коде.Видимо Visibility="hidden"...

И не там указаны, и не "hidden". Вот где ключевое место:

Выделить код

Код:

} else {
  docObj = "document."
  styleObj = ""
}

Исправьте так:

Выделить код

Код:

} else {
  docObj = "document.getElementById('"
  styleObj = "').style"
}

и будет работать.


"З.Ы.":

EdvardH пишет

...
...
    subform.otkuda.value = choice       //********* tchto to ne tak
...
    subform.kuda.value = choice  //********* tchto to ne tak
...

а эти строчки даже в IE не работают: "subform.otkuda есть null или не является объектом".

Отредактировано Anton (12-05-2006 21:57:18)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№412-05-2006 22:40:59

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

Re: списки JavaScript не работают в MoZILLA

Исправьте так:

Выделить код

Код:

} else {
  docObj = "document.getElementById('"
  styleObj = "').style"
}

и будет работать.

Работает---, но посмотрел в яву консоль_ там пишет ошибку : subform.otkuda has no properties , и требует использовать запрос document.getElementById() по стандарту W3C. Может подскажите как этот запрос правильно вписать? Заранее спасибо.

Отсутствует

 

№513-05-2006 09:17:38

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

Re: списки JavaScript не работают в MoZILLA

: subform.otkuda has no properties -- Извините :) , перенапряжение ведёт к невнимательности.



, и требует использовать запрос document.getElementById() по стандарту W3C.- А вот как это  не понятно.

Отсутствует

 

№613-05-2006 09:54:57

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

Re: списки JavaScript не работают в MoZILLA

Большое спасибо за подсказку, проблема решена.:rock: в Мадзилле но теперь проблемы в IE ! :cry:

Отредактировано EdvardH (13-05-2006 19:59:35)

Отсутствует

 

№713-05-2006 11:55:06

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508

Re: списки JavaScript не работают в MoZILLA

А как там ведет себя Netscape Communicator 4.7? Или в нем скрипт и раньше не работал?

Отсутствует

 

№813-05-2006 12:42:01

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

Re: списки JavaScript не работают в MoZILLA

Сам в Netscape не пробовал по причине его отсутствия, учитывая технику исполнения проблемы должны были быть.
На сайте http://javascript.internet.com/forms/  есть много интересных скриптов которые не везде работают по причине их древности.

Отсутствует

 

№913-05-2006 14:03:48

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508

Re: списки JavaScript не работают в MoZILLA

по причине их древности.

Я по причине своей относительной недревности предпочитаю нужные скрипты писать сам. Как крайняя мера - просмотреть тщательно весь код. Потом в случае чего хочется руки оторвать уже только себе.
Кстати, интересная мысль. Сделать скриптик Online Elderness Analyzer, который проверял бы скрипты на наличие интересных конктрукций типа document.all. Подумаю.

Отсутствует

 

№1013-05-2006 14:34:23

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: списки JavaScript не работают в MoZILLA

Al_H пишет

...
...который проверял бы скрипты на наличие интересных конктрукций типа document.all. Подумаю.

А у меня в FF document.all. работает... Я определённо чего-то не понимаю.


и даже скрипт из первого сообщения в теме работает, если заменить альтернативу

Выделить код

Код:

if (document.all) {
  docObj = "document.all."
  styleObj = ".style"
  } else {
  docObj = "document."
  styleObj = ""
}

простым присваиванием

Выделить код

Код:

docObj = "document.all."
styleObj = ".style"

Отредактировано Anton (13-05-2006 14:57:05)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1113-05-2006 17:58:24

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

Re: списки JavaScript не работают в MoZILLA

А у меня в FF document.all. работает... Я определённо чего-то не понимаю.

И у меня работает, но если заглянуть в Tools -> JavaScript консоль, там можно найти интересный список всякого рода жалоб и предупреждений(если скрипт сделан коряво).

Отсутствует

 

№1213-05-2006 20:31:05

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

Re: списки JavaScript не работают в MoZILLA

Господа! Добились что скрипт работает на 100% в Мадзилле  и не адекватно в IE, вначале было на оборот.:/

Если доработать скрипт так чтобы он в зависимости от того где он выполняется в М или IE выбирал нужную команду

subform.otkuda.value = choice  //для IE
или
document.getElementById('otkuda').value = choice // для Мадзиллы

Отсутствует

 

№1313-05-2006 23:20:14

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771

Re: списки JavaScript не работают в MoZILLA

Anton

А у меня в FF document.all. работает... Я определённо чего-то не понимаю.

Bug 248549 - Add undetected document.all support


Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.

Отсутствует

 

№1413-05-2006 23:46:00

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: списки JavaScript не работают в MoZILLA

Кстати, if (document.all) возвращает false.

Отсутствует

 

№1513-05-2006 23:50:16

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771

Re: списки JavaScript не работают в MoZILLA

Yan

Кстати, if (document.all) возвращает false.

Разумеется.  Bug 248549 - Add undetected document.all support

https://bugzilla.mozilla.org/show_bug.cgi?id=248549#c9

> If Mozilla were to add support for document.all, it would make it very hard
> (if not impossible) to distinguish it from other browsers.

The _entire point_ of this bug is that the supported would be undetectable. In
other words,

   if (document.all) { ... }

...would _not_ catch Mozilla.


Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.

Отсутствует

 

№1614-05-2006 01:13:53

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

Re: списки JavaScript не работают в MoZILLA

Чтобы не мучились, здесь рабочий скрипт, но работает или  в FF или в IE, нехватает только руководителя который рулил бы в зависимости от броузера. Да ещё теряет переменную "откуда" :(, а переменная sub уходит как и надо до страницы test.php


<SCRIPT LANGUAGE="JavaScript">

catnumber = 3
offset = 150
performOnchange = false
if (document.all) {
docObj = "document.all."
styleObj = ".style"
} else {
docObj = "document."
styleObj = ""
}
function openselect(subcat) {
popupselect = eval("document.getElementById('"+subcat+"').style")
popupselect.visibility = "visible"
}
function closeselect(submenu,subcat){
popupselect = eval("document.getElementById('"+subcat+"').style")
if (submenu.selectedIndex != 0) {
numchoice = submenu.selectedIndex
choice = submenu[numchoice].value
document.getElementById('otkuda').value = choice //********* tдля FF
//subform.otkuda.value = choice  //**************************************для IE
}
}

function lock() {
performOnchange = false
}
function unlock() {
performOnchange = true
}
function selectSub(cat) {
for (i=1; i <= catnumber; i++) {
subcat = "sub" + i
//popupselect = eval(docObj + subcat + styleObj);
popupselect = eval("document.getElementById('"+subcat+"').style")
popupselect.visibility = "hidden"
}
if (performOnchange == true) {
letsopen = "sub" + cat.selectedIndex
if (letsopen == "sub0") {
alert("No category selected")
choice = "- subcategory -"
subcategory.value = choice
cat.focus()
} else {
openselect(letsopen)
lock()
}
}
}
//  *************** End ************
</script>

<style>
        #sub, #sub1, #sub2
        { position: absolute;visibility: hidden;
          z-index: 3
        }
</style>


<table><tr>
<form METHOD="POST" ACTION="test.php" name="subform">
<div>
<table border="0" width="100%">
  <tr>
    <td width="100%">
      <table border="0" width="70%" cellspacing="5">
        <tr>

        </tr>
        <tr><td width="51%" align="center">
            <p align="left"><font face="Verdana,Tahoma,Arial" color="#000000" size="2"><b>Region</b></font></p>
        </td></tr>
        <tr>
             <td width="50%">

    <select name="otkuda" Value="1" style="{border: inset 1px; background: #EEEEEE;}" onmouseover="unlock()" onchange="selectSub(this)">
    <option selected value="">Vibrat region
    <option value="Moskva">Mosk.obl
    <option value="novgorod">Novg.obl
    <option value="lenobl">Leningr.obl
  </select>
    <br>
        </td></tr>

  <tr><td width="51%">
<span id="sub1">
  <select name="sub" Value="1" style="{border: inset 1px; background: #EEEEEE;}" onchange="closeselect(this,'sub1')">
    <option selected value="">gorod
  <option value="Moskva">Moskva</option>
  <option value="Mitishi">Mitishi</option>
  <option value="Tver">Tver</option>
  </select>
</span>

<span id="sub2">
  <select name="sub" Value="1" style="{border: inset 1px; background: #EEEEEE;}" onchange="closeselect(this,'sub2')">
    <option selected value="">gorod
  <option value="Novgorod">Novgorod</option>
  <option value="Gorodok">Gorodok</option>
  <option value="Stancia">Stancia</option>
  </select>
</span>

<span id="sub3">
  <select name="sub" Value="1" style="{border: inset 1px; background: #EEEEEE;}" onchange="closeselect(this,'sub3')">
    <option selected value="">gorod
  <option value="Piter">Piter</option>
  <option value="Lodeika">Lodeika</option>
  <option value="Viborg">Viborg</option>
  </select>
</span>
     </td></tr>
</div>

</table>
<input type="hidden" name="otkuda" id="otkuda"> <!-- idut v script -->
<input type="hidden" name="kuda" id="kuda">

<input type="submit" value=" OK " style="cursor:pointer;" class="but"></form>

Отсутствует

 

№1714-05-2006 09:27:29

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: списки JavaScript не работают в MoZILLA

Unghost, спасибо за разъяснение.

EdvardH пишет

...Да ещё теряет переменную "откуда"...а переменная sub уходит как и надо до страницы test.php

У меня и sub не уходит... В общем можно заменить

Выделить код

Код:

...
document.getElementById('otkuda').value = choice //********* tдля FF
//subform.otkuda.value = choice  //**************************************для IE
...
<select name="otkuda"...

на

Выделить код

Код:

...
document.getElementById('otkuda').value = choice //********* tдля FF
...
<select name="otkuda2"...

тогда 'otkuda' не потеряется.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1814-05-2006 10:14:14

EdvardH
Участник
 
Группа: Members
Зарегистрирован: 12-05-2006
Сообщений: 13

Re: списки JavaScript не работают в MoZILLA

Да........ работает, но скрипт теперь можно использовать в игре спортлото :)

Код файла test.php   /
<?php
print '
<br>otkuda'. $otkuda. '
<br> sub'.$sub;
?>

/  результаты  странные:  если выбрано Моск.обл/ Мытищи то  test.php выдаёт Москва/ Лодейка , Если в начале предусматривалось что текстбокс-sub должен быть невидимым то теперь он видим постоянно.

Отсутствует

 

№1914-05-2006 11:09:10

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: списки JavaScript не работают в MoZILLA

EdvardH пишет

Да........ работает, но скрипт теперь можно использовать в игре спортлото :)
...

Ну, не знаю, у меня

Выделить код

Код:

<?php
print '
<br>otkuda'. $otkuda. '
<br> sub'.$sub;
?>

выдаёт

Выделить код

Код:

otkudaMitishi
sub

в FF, Opera и IE. И никаких лишних текстбоксов.

Все браузеры отдают

Выделить код

Код:

otkuda2=Moskva
sub=Mitishi
sub=
sub=
otkuda=Mitishi
kuda=

Могу предположить:

1) Либо неправильно внесены предложенные изменения (или не туда)
2) Либо сервер/php глючат

Отредактировано Anton (14-05-2006 11:11:19)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№2014-05-2006 14:22:50

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: списки JavaScript не работают в MoZILLA

Всё, что у меня есть, есть в этой теме:
html (http://forum.mozilla.ru/viewtopic.php?p … 45#p105445)
с исправлением (http://forum.mozilla.ru/viewtopic.php?p … 90#p105490)
и php (http://forum.mozilla.ru/viewtopic.php?p … 94#p105494)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]