Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.10.2008, 15:22
SerG
 
Сообщений: n/a

Просьба помочь со скриптом - всплывающее меню
Здравствуйте. я - абсолютный нуб, поэтому не судите строго за, наверно, глупый вопрос. Вобщем подобрал я на одном сайте выпадающее меню, подсмотрел его код. Очень простой. В виде таблицы, где высовующиеся элементы - это строчки таблицы, которые по умолчанию скрытые, а при клике отображаются. Сам код выглядит так:

<style>
.hide	{display: none}
.show	{display: block}
</style>
<script>
function setTables(el) {
     	var tables=el.parentNode.getElementsByTagName("TABLE");
     	for (var i=0; i<tables.length; i++) {
     		tables[i].className=(tables[i].className=='hide')?'show':'hide'
     	}
     }
</script>

<table><tr><td>
<a href='javascript:;' onClick='setTables(this);' class='mainmenu'>Меню</a>
<table border=0 width=170 class='hide' cellpadding="0" cellspacing="0" align=left > <tr> <td ><a href='1.html' class='menu' >Пункт1</a></td>        </tr></table></td></tr>



Мне были нужны подменю, и добавил еще строчку, и получилось:
<style>
.hide	{display: none}
.show	{display: block}
</style>
<script>
function setTables(el) {
     	var tables=el.parentNode.getElementsByTagName("TABLE");
     	for (var i=0; i<tables.length; i++) {
     		tables[i].className=(tables[i].className=='hide')?'show':'hide'
     	}
     }
</script>

<table><tr><td>
<a href='javascript:;' onClick='setTables(this);' class='mainmenu'>Меню</a>
<table border=0 width=170 class='hide' cellpadding="0" cellspacing="0" align=left > <tr> <td ><a href='javascript:;' onClick='setTables(this);' class='mainmenu'>Пункт1</a><table border=0 width=170 class='hide' cellpadding="0" cellspacing="0" align=left > <tr> <td ><a href='1.html'>Пункт1.1</a></td></tr></table></td></tr></table></td></tr>



Так вот проблема в том, что подменю открывается во всех браузерах только после второго клика. Будто первый раз onClick не срабатывает, или вызывает не ту функцию. Где я мог ошибится в таком простом коде?

Последний раз редактировалось Андрей Параничев, 13.10.2008 в 16:26. Причина: Пользуйтесь bb-кодами [html] и [js] для оформления листингов кода в теле сообщения
Ответить с цитированием
  #2 (permalink)  
Старый 13.10.2008, 16:05
SerG
 
Сообщений: n/a

поправка
Не правильно написал. При вышесказанном раскладе у меня открываются сразу все подменю. А для раскрытия отдельного делал так:

<style>
.hide {display: none}
.hide2 {display: none}
.show {display: block}
</style>
<script>
function setTables(el) {
var tables=el.parentNode.getElementsByTagName("TABLE") ;
for (var i=0; i<tables.length; i++) {
tables[i].className=(tables[i].className=='hide')?'show':'hide'
}
}
</script>
<script>
function setTabless(el) {
var tables=el.parentNode.getElementsByTagName("TABLE") ;
for (var i=0; i<tables.length; i++) {
tables[i].className=(tables[i].className=='hide2')?'show':'hide2'
}
}
</script>

<table><tr><td>
<a href='javascript:;' onClick='setTables(this);' class='mainmenu'>Меню</a>
<table border=0 width=170 class='hide' cellpadding="0" cellspacing="0" align=left > <tr> <td ><a href='javascript:;' onClick='setTabless(this);' class='mainmenu'>Пункт1</a><table border=0 width=170 class='hide2' cellpadding="0" cellspacing="0" align=left > <tr> <td ><a href='1.html'>Пункт1.1</a></td></tr></table></td></tr></table></td></tr>


И вот тогда-то приходится делать лишний клик

Последний раз редактировалось Андрей Параничев, 13.10.2008 в 16:26. Причина: Пользуйтесь bb-кодами [html] и [js] для оформления листингов кода в теле сообщения
Ответить с цитированием
  #3 (permalink)  
Старый 13.10.2008, 16:20
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

используйте теги для форматирования постов на форуме %(
Ответить с цитированием
  #4 (permalink)  
Старый 13.10.2008, 16:35
Новичок на форуме
Отправить личное сообщение для SerG Посмотреть профиль Найти все сообщения от SerG
 
Регистрация: 13.10.2008
Сообщений: 4

выделение
извините. больше не повторится :rolleyes:
Ответить с цитированием
  #5 (permalink)  
Старый 14.10.2008, 00:00
Новичок на форуме
Отправить личное сообщение для SerG Посмотреть профиль Найти все сообщения от SerG
 
Регистрация: 13.10.2008
Сообщений: 4

Ну если все-таки у кого-то возникнет какая мысль - пишите. Проблема еще не решена.
Ответить с цитированием
  #6 (permalink)  
Старый 14.10.2008, 08:33
jsch
 
Сообщений: n/a

вопрос
так в чем проблема
в том что открывается все
или в том что открывается только первое подменю а подподменю - нет ???
Ответить с цитированием
  #7 (permalink)  
Старый 14.10.2008, 09:22
...
Отправить личное сообщение для Zibba Посмотреть профиль Найти все сообщения от Zibba
 
Регистрация: 13.10.2008
Сообщений: 225

Надеюсь чем то смог помочь
Я конечно тоже не гуру, но попытаюсь помочь.

Во первых думаю две одинаковых функции - это лишнее, поэтому оставил все го лишь одну .
Во вторых, так и не понял для чего у тега <table> определен сlass='mainmenu' который ни где не описан, поэтому выкинул лишний мусор.
В третьих Вы куда то потеряли закрывающий тег </table> основной таблицы (исправил и этот ляп)

Ну и вот, думаю то что Вам было нужно:
<style>
	.hide {display: none}
	.hide2 {display: none}
	.show {display: block}
</style>
<script>
	function setTables(el) {
		var tables=el.parentNode.getElementsByTagName("TABLE") ;
		for (var i=0; i<tables.length; i++) {
			tables[i].className=(tables[i].className=='hide')?'show':'hide';
		}
	}
</script>
<table><tr>
	<td>
		<a href='javascript:;' onClick='setTables(this);'>Меню</a>
		<table border=0 width=170 class='hide' cellpadding="0" cellspacing="0" align=left><tr>
			<td>
			<a href='javascript:;' onClick='setTables(this);'>Пункт1</a>
			<table border=0 width=170 class='hide2' cellpadding="0" cellspacing="0" align=left>	<tr>
				<td>
				<a href='1.html'>Пункт1.1</a>
				</td></tr>
			</table>
			</td></tr>
		</table>
	</td></tr>
</table>
Ответить с цитированием
  #8 (permalink)  
Старый 14.10.2008, 10:19
Новичок на форуме
Отправить личное сообщение для SerG Посмотреть профиль Найти все сообщения от SerG
 
Регистрация: 13.10.2008
Сообщений: 4

Потрясно! Все отлично работатет!!! Так и думал, что решение элементарное. Большое Вам спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск