Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Див реагирует только на втором нажатии
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Див реагирует только на втором нажатии

Страниц (1): [1]
 

1. metra - 04 Марта, 2011 - 09:20:46 - перейти к сообщению
Код формы:
CODE (html):
скопировать код в буфер обмена
  1. {foreach from=$all_categories item=cat}
  2.         {assign var="p" value="not"}
  3.         {foreach from=$profs item=prof}
  4.                 {if $cat.id == $prof.category_id}{assign var="p" value=$prof}{/if}
  5.         {/foreach}
  6.         <br><input onclick = "hide_show({$cat.id})" type = "checkbox" name = "prof{$cat.id}" {if $p != 'not'}checked{/if} > {$cat.name}
  7.         <textarea {if $p == 'not'}class = "textarea1_hidden"{else}class = "textarea1"{/if} id = "abc{$cat.id}" name = "prof_description{$cat.id}">{if $p != 'not'}{$p.description}{/if}</textarea>
  8.         {/foreach}


JavaScript:
CODE (javascript):
скопировать код в буфер обмена
  1. function hide_show(id)
  2.         {
  3.                 if(document.getElementById('abc'+id).style.display == 'none')
  4.                 { document.getElementById('abc'+id).style.display = 'block' }
  5.                 else
  6.                 { document.getElementById('abc'+id).style.display = 'none' }
  7.         }


CSS:
CODE (htmlphp):
скопировать код в буфер обмена
  1. .textarea1, .textarea1_hidden { width: 374px; height: 150px; padding: 5px; display: block; }
  2. .textarea1_hidden { display: none; }


Суть проблемы: те checkbox'ы, которые на момент отображения страницы отмечены, работаю правильно в плане сокрытия смежных им textarea, а те, которые не отмечены, работаю так - при нажатии checkbox отмечается, но смежный textarea не показывается и только при повторном нажатии (убираем галочку) он показывается. Что противоречит логике.
2. Viper - 04 Марта, 2011 - 10:26:55 - перейти к сообщению
metra пишет:
Что противоречит логике.

Противоречит логике ваша проверка if(document.getElementById('abc'+id).style.display == 'none') и иже с ними.

Для начала нужно проверять отмечен ли чекбокс.
3. metra - 04 Марта, 2011 - 10:58:53 - перейти к сообщению
В итоге в какой уже раз решение проблемы было в том, что я что-то забыл указать))
Я уже пробовал с проверкой на отметку чекбокса, но забыл чекбоксам назначить ID, а выборку из DOM делал как раз по ID)

Спасибо за наводку. Проблема решена.
Решил так:
CODE (javascript):
скопировать код в буфер обмена
  1. function hide_show(id)
  2. {
  3.         if(document.getElementById('prof'+id).checked)
  4.         { document.getElementById('abc'+id).style.display = 'block' }
  5.         else
  6.         { document.getElementById('abc'+id).style.display = 'none' }
  7. }
4. JustUserR - 04 Марта, 2011 - 13:19:37 - перейти к сообщению
metra пишет:
Но смежный textarea не показывается и только при повторном нажатии (убираем галочку) он показывается
Возможной причиной осуществления возникновения предполагаемого некорректного функционирования флаговых объектов, связанных с обеспечением последовательных выполняемых обратных действий при повторном использовани объекта, может являться использование браузером значения информационного поля во внутреннем уровне элементого трактования, отличного от специфицируемого впоследствии CSS-параметра типа block или none

 

Powered by ExBB FM 1.0 RC1