Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Меню на JS
 
 автор: x][x   (28.02.2009 в 14:46)   письмо автору
 
 

Здравствуйте, помогите с выпадающим меню, все в принципе работает, но пока все меню не раскроются, выдает ошибку,

Строка: 20
Символ: 1
Ошибка: Не удалось получить свойство display. Недоступный аргумент.
Код: 0

код меню:

<html>
<head>
<title></title>
<script language="javascript">
function getCookie(name) {  
      var a = name+"=";  
      var cookieStartIndex = document.cookie.indexOf(a);  
      if (cookieStartIndex == -1) return null;  
      var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + a.length);  
      if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;  
      return unescape(document.cookie.substring(cookieStartIndex + a.length, cookieEndIndex));  

function startbl4() { 
var d = document; 
var a = getCookie('sub1');  
var c = getCookie('sub2'); 
d.getElementById('sub1').style.display = a; 
d.getElementById('sub2').style.display = c;
}  

function showbl4(obj) { 
var d = document;  
var a = d.getElementById(obj).style.display;   
var c = d.getElementById(obj).style.display; 
var z = d.getElementById(obj).style.display = ( a == 'none')?'block':'none'; 
d.cookie = obj+'='+z; 
var x = d.getElementById(obj).style.display = ( c == 'none')?'block':'none'; 
d.cookie = obj+'='+x; 
}
</script>
</head>
<body onload="startbl4()">

<table onclick="showbl4('sub1')"><tr><td>
    Меню1
</td></tr></table>
<span id="sub1" style="display: none">

    <table><tr><td>
        <a href='11'>подменю1.1</a>
    </td></tr></table>

    <table><tr><td>
        <a href='12'>подменю1.2</a>
    </td></tr></table>

    <table><tr><td>
        <a href='13'>подменю1.3</a>
    </td></tr></table>
</span>

<table><tr><td>
    <a href="1">Меню2</a>
</td></tr></table>

<table onclick="showbl4('sub2')"><tr><td>
    Меню3
</td></tr></table>

<span id="sub2" style="display: none">

    <table><tr><td>
        <a href='3'>подменю3.1</a>
    </td></tr></table>

    <table><tr><td>
        <a href='32'>подменю3.2</a>
    </td></tr></table>

    <table><tr><td>
        <a href='33'>подменю3.3</a>
    </td></tr></table>

    <table><tr><td>
        <a href='34'>подменю3.4</a>
     </td></tr></table>
</span>
</body>
</html>

  Ответить  
 
 автор: PAT   (01.03.2009 в 01:48)   письмо автору
 
   для: x][x   (28.02.2009 в 14:46)
 

Добавьте два alert'a - и, полагаю, сразу поймёте, в чём ваша проблема.
function startbl4() { 
var d = document; 
var a = getCookie('sub1'); alert (a);
var c = getCookie('sub2'); alert (c);
d.getElementById('sub1').style.display = a; 
d.getElementById('sub2').style.display = c;

Куки надо не только читать.
Их перед прочтением надо бы сначала "поставить" на компе пользователя :-)

  Ответить  
 
 автор: x][x   (01.03.2009 в 13:42)   письмо автору
 
   для: PAT   (01.03.2009 в 01:48)
 

Не могли бы подсказать как сделать так, что бы по умолчанию в cookie 'ах style.display='none'.
JS только начал осваивать, пока еще ни все понимаю, так что если можно поподробнее...
И еще вопрос, как можно заменить запуск функции
<body onload="startbl4()"> 

а то меню разворачивается только после загрузки всей страницы, а хотелось что бы это происходило одновременно с его появлением.
Заранее спасибо.

  Ответить  
 
 автор: PAT   (01.03.2009 в 14:42)   письмо автору
 
   для: x][x   (01.03.2009 в 13:42)
 

Ответ на первый вопрос:
function startbl4() { 
var d = document; 
var a = getCookie('sub1');  
var c = getCookie('sub2'); 
if (!a && !c) a = c = 'none';
d.getElementById('sub1').style.display = a; 
d.getElementById('sub2').style.display = c;
}

Ответ на второй вопрос:
onload="startbl4()" из тега <BODY> уберите.

И пропишите после закрывающего тега </TABLE>
<script>startbl4 ();</script>

  Ответить  
 
 автор: x][x   (01.03.2009 в 15:58)   письмо автору
 
   для: x][x   (28.02.2009 в 14:46)
 

Столкнулся еще с одной проблемой :(
Сделал так чтобы cookie хранились 2 недели, но они сохраняются не для всего сайта, а для каждого раздела отдельно 1@guestbook.txt, 1@katalog.txt и т.д. в итоге при переходе из одного раздела в другой меню раскрывается по-разному.

function showbl4(obj) { 
var d = document;
var today = new Date();
expires = new Date(today.getTime() + 2*7*24*60*60*1000);
var a = d.getElementById(obj).style.display;   
var b = d.getElementById(obj).style.display; 
var c = d.getElementById(obj).style.display; 
var z = d.getElementById(obj).style.display = ( a == 'none')?'block':'none'; 
d.cookie = obj+'='+z+ '; expires=' + expires.toGMTString(); 
var x = d.getElementById(obj).style.display = ( b == 'none')?'block':'none'; 
d.cookie = obj+'='+x+ '; expires=' + expires.toGMTString(); 
}

  Ответить  
 
 автор: PAT   (01.03.2009 в 16:10)   письмо автору
 
   для: x][x   (01.03.2009 в 15:58)
 

d.cookie = obj + '=' + z + '; expires=' + expires.toGMTString () + '; domain=' + document.domain + '; path=/';
и
d.cookie = obj + '=' + x + '; expires=' + expires.toGMTString () + '; domain=' + document.domain + '; path=/';

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования