EdvardH > 12-05-2006 15:16:42 |
Вставили в сайт Динамически заполняющийся список, в Эксплорере работает безупречно а в Mazilla,Opere,Netscape встаёт колом. Времени разбираться уже нет . Может кому знакомо решение проблемы ? Ключевые места проблемы указаны в коде.Видимо 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> |
Al_H > 12-05-2006 16:42:46 |
Надо бы для Firefox и других современных браузеров добавить адресацию через document.getElementById() |
Anton > 12-05-2006 21:43:51 |
EdvardH пишет...Ключевые места проблемы указаны в коде.Видимо Visibility="hidden"...
И не там указаны, и не "hidden". Вот где ключевое место: Исправьте так: и будет работать.
"З.Ы.": EdvardH пишет... ... subform.otkuda.value = choice //********* tchto to ne tak ... subform.kuda.value = choice //********* tchto to ne tak ...
а эти строчки даже в IE не работают: "subform.otkuda есть null или не является объектом". |
EdvardH > 12-05-2006 22:40:59 |
Исправьте так: и будет работать. Работает---, но посмотрел в яву консоль_ там пишет ошибку : subform.otkuda has no properties , и требует использовать запрос document.getElementById() по стандарту W3C. Может подскажите как этот запрос правильно вписать? Заранее спасибо. |
EdvardH > 13-05-2006 09:17:38 |
: subform.otkuda has no properties -- Извините , перенапряжение ведёт к невнимательности.
, и требует использовать запрос document.getElementById() по стандарту W3C.- А вот как это не понятно. |
EdvardH > 13-05-2006 09:54:57 |
Большое спасибо за подсказку, проблема решена. в Мадзилле но теперь проблемы в IE ! |
Al_H > 13-05-2006 11:55:06 |
А как там ведет себя Netscape Communicator 4.7? Или в нем скрипт и раньше не работал? |
EdvardH > 13-05-2006 12:42:01 |
Сам в Netscape не пробовал по причине его отсутствия, учитывая технику исполнения проблемы должны были быть. На сайте http://javascript.internet.com/forms/ есть много интересных скриптов которые не везде работают по причине их древности. |
Al_H > 13-05-2006 14:03:48 |
Я по причине своей относительной недревности предпочитаю нужные скрипты писать сам. Как крайняя мера - просмотреть тщательно весь код. Потом в случае чего хочется руки оторвать уже только себе. Кстати, интересная мысль. Сделать скриптик Online Elderness Analyzer, который проверял бы скрипты на наличие интересных конктрукций типа document.all. Подумаю. |
Anton > 13-05-2006 14:34:23 |
Al_H пишет... ...который проверял бы скрипты на наличие интересных конктрукций типа document.all. Подумаю.
А у меня в FF document.all. работает... Я определённо чего-то не понимаю.
и даже скрипт из первого сообщения в теме работает, если заменить альтернативу простым присваиванием |
EdvardH > 13-05-2006 17:58:24 |
А у меня в FF document.all. работает... Я определённо чего-то не понимаю. И у меня работает, но если заглянуть в Tools -> JavaScript консоль, там можно найти интересный список всякого рода жалоб и предупреждений(если скрипт сделан коряво). |
EdvardH > 13-05-2006 20:31:05 |
Господа! Добились что скрипт работает на 100% в Мадзилле и не адекватно в IE, вначале было на оборот. Если доработать скрипт так чтобы он в зависимости от того где он выполняется в М или IE выбирал нужную команду subform.otkuda.value = choice //для IE или document.getElementById('otkuda').value = choice // для Мадзиллы |
Unghost > 13-05-2006 23:20:14 |
Anton А у меня в FF document.all. работает... Я определённо чего-то не понимаю.
Bug 248549 - Add undetected document.all support |
Yan > 13-05-2006 23:46:00 |
Кстати, if (document.all) возвращает false. |
Unghost > 13-05-2006 23:50:16 |
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.
|
EdvardH > 14-05-2006 01:13:53 |
Чтобы не мучились, здесь рабочий скрипт, но работает или в 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> |
Anton > 14-05-2006 09:27:29 |
Unghost, спасибо за разъяснение. EdvardH пишет...Да ещё теряет переменную "откуда"...а переменная sub уходит как и надо до страницы test.php
У меня и sub не уходит... В общем можно заменить на тогда 'otkuda' не потеряется. |
EdvardH > 14-05-2006 10:14:14 |
Да........ работает, но скрипт теперь можно использовать в игре спортлото Код файла test.php / <?php print ' <br>otkuda'. $otkuda. ' <br> sub'.$sub; ?> / результаты странные: если выбрано Моск.обл/ Мытищи то test.php выдаёт Москва/ Лодейка , Если в начале предусматривалось что текстбокс-sub должен быть невидимым то теперь он видим постоянно. |
Anton > 14-05-2006 11:09:10 |
EdvardH пишетДа........ работает, но скрипт теперь можно использовать в игре спортлото ...
Ну, не знаю, у меня выдаёт в FF, Opera и IE. И никаких лишних текстбоксов. Все браузеры отдают Могу предположить: 1) Либо неправильно внесены предложенные изменения (или не туда) 2) Либо сервер/php глючат |
Anton > 14-05-2006 14:22:50 |
Всё, что у меня есть, есть в этой теме: 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) |