Вход

Просмотр полной версии : Событие запускается со второго клика


sympler
10.08.2011, 15: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, 15:21
<a href="javascript:void" onclick="showAdd(); return false;">Показать дополнительные поля</a><br>

ksa
10.08.2011, 15:27
почему фукнция работает только со второго клика
Условие поменяй...

<!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, 15:32
Первый раз нужное тебе значение = пусто...
все у него с условием норм, то что оно пустое это говорит о том что оно отображается, но если оно скрыто, то 100% имеет значение none, а проверять на присутствие block не рекомендуется, потому как оно может иметь значение отличное от block, а значение none всегда стоит в случае если элемент скрыт даже свойствами css

ksa
10.08.2011, 15:35
если оно скрыто, то 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... :)

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

devote
10.08.2011, 15:36
Это кто такое сказал?
да яж образно, что бы в будущем прог знал что стоит придерживаться того а не того.

ksa
10.08.2011, 15:38
что бы в будущем прог знал что стоит придерживаться того а не того
Несогласный я... :no:

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

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

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

sympler
10.08.2011, 15:57
Условие поменяй...

<!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, 15:59
странно.. все один в один...
У меня условие не такое как у тебя в примере...

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

ksa
10.08.2011, 16:00
но скрипт работает с первого раза только при использовании
<div id="add_tables" style="display:none;">
Вот тогда "первое" значение действительно none. :yes:

ksa
10.08.2011, 16:01
и переменную "o" не использую. разве есть разница?
Текста меньше - уже хорошо. :write: