Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Событие запускается со второго клика (https://javascript.ru/forum/events/20587-sobytie-zapuskaetsya-so-vtorogo-klika.html)

sympler 10.08.2011 14:18

Событие запускается со второго клика
 
не могу понять почему фукнция работает только со второго клика

<a href="javascript:void" onclick="showAdd();">Показать дополнительные поля</a><br>

<div id="add_tables" >

это блок

</div>


function showAdd() {if (document.getElementById("add_tables").style.display == "none") {document.getElementById("add_tables").style.display = "block";} else {document.getElementById("add_tables").style.display = "none";} }

devote 10.08.2011 14:21

<a href="javascript:void" onclick="showAdd(); return false;">Показать дополнительные поля</a><br>

ksa 10.08.2011 14:27

Цитата:

Сообщение от sympler
почему фукнция работает только со второго клика

Условие поменяй...

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#add_tables {
	display: none;
}
</style>
<script type="text/javascript">
function showAdd() {
	var o=document.getElementById("add_tables")
	if (o.style.display == "block") {
		o.style.display = "none";
	} else {
		o.style.display = "block";
	} 
}
</script>
</head>
<body>
<a href="javascript:void" onclick="showAdd();">Показать дополнительные поля</a>
<br />
<div id="add_tables">
	это блок
</div>
</body>
</html>


Первый раз нужное тебе значение = пусто...

devote 10.08.2011 14:32

Цитата:

Сообщение от ksa
Первый раз нужное тебе значение = пусто...

все у него с условием норм, то что оно пустое это говорит о том что оно отображается, но если оно скрыто, то 100% имеет значение none, а проверять на присутствие block не рекомендуется, потому как оно может иметь значение отличное от block, а значение none всегда стоит в случае если элемент скрыт даже свойствами css

ksa 10.08.2011 14:35

Цитата:

Сообщение от devote
если оно скрыто, то 100% имеет значение none

Бивас тест...

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#add_tables {
	display: none;
}
</style>
<script type="text/javascript">
function showAdd() {
	var o=document.getElementById("add_tables")
	alert(o.style.display)
	if (o.style.display == "none") {
		o.style.display = "block";
	} else {
		o.style.display = "none";
	} 
}
</script>
</head>
<body>
<a href="javascript:void" onclick="showAdd();">Показать дополнительные поля</a>
<br />
<div id="add_tables">
	это блок
</div>
</body>
</html>


Никакого none... :)

Цитата:

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

Это кто такое сказал? :blink:
У автора только два значения
- block
- none

devote 10.08.2011 14:36

Цитата:

Сообщение от ksa
Это кто такое сказал?

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

ksa 10.08.2011 14:38

Цитата:

Сообщение от devote
что бы в будущем прог знал что стоит придерживаться того а не того

Несогласный я... :no:

devote 10.08.2011 14:41

Цитата:

Сообщение от ksa
Никакого none...

Да видимо я попутал с тем когда вводишь display: none; в в атрибуте style="" хотя конечно лучше юзать currentStyle или computedStyle (FF) там четко стоит то что нужно

devote 10.08.2011 14:44

Цитата:

Сообщение от ksa
Несогласный я...

Гогда начнешь писать какой нить фреймфорк или плаг где тебе не будет извесно значение элемента по умолчанию, тогда согласишься и будешь проверять на значение none.

ksa 10.08.2011 14:54

devote, я буду проверять на значение которое сам буду прописывать. :) А не то какое стоит в стилях...

sympler 10.08.2011 14:57

Цитата:

Сообщение от ksa (Сообщение 119510)
Условие поменяй...

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#add_tables {
	display: none;
}
</style>
<script type="text/javascript">
function showAdd() {
	var o=document.getElementById("add_tables")
	if (o.style.display == "block") {
		o.style.display = "none";
	} else {
		o.style.display = "block";
	} 
}
</script>
</head>
<body>
<a href="javascript:void" onclick="showAdd();">Показать дополнительные поля</a>
<br />
<div id="add_tables">
	это блок
</div>
</body>
</html>


Первый раз нужное тебе значение = пусто...

странно.. все один в один...
только не в одном файле а в разных css, js, html
ну и переменную "o" не использую. разве есть разница? (за исключением более быстрой обработки и меньшей длины кода)

блок по умолчанию скрыт... display:none прописан в отдельном файле css
но скрипт работает с первого раза только при использовании
<div id="add_tables" style="display:none;">

ksa 10.08.2011 14:59

Цитата:

Сообщение от sympler
странно.. все один в один...

У меня условие не такое как у тебя в примере...

Цитата:

Сообщение от sympler
блок по умолчанию скрыт... display:none прописан в отдельном файле css

Потому-то его "первое" значение для тебя "" (пусто), а не none, как ты ожидаешь... ;)

ksa 10.08.2011 15:00

Цитата:

Сообщение от sympler
но скрипт работает с первого раза только при использовании
<div id="add_tables" style="display:none;">

Вот тогда "первое" значение действительно none. :yes:

ksa 10.08.2011 15:01

Цитата:

Сообщение от sympler
и переменную "o" не использую. разве есть разница?

Текста меньше - уже хорошо. :write:


Часовой пояс GMT +3, время: 20:00.