2012-05-11 3 views
0

В CSS:Простой Javascript проблема - список не расширяется корректно

#divMainMenu ul { 
    list-style-type: none; 
    padding: 5px 0; 
    height:400px; 
} 
#divMainMenu li { 
    height: 17px; 
    margin: 3px 0; 
    padding: 14px 2px; 
    border: 1px solid #eee7cb; 
    background: url(../../Images/50pTransparent-20x20.png) repeat; 
} 
#divMainMenu li ul{ 
    display: none; 
} 

HTML, и сценарий:

<script type="text/javascript"> 
function Show(pObj) 
{ 
pObj = document.getElementById(pObj).id; 
if (document.getElementById(pObj).style.display=='none') 
    document.getElementById(pObj).style.display='block'; 
else 
    document.getElementById(pObj).style.display='none'; 
} 
</script> 
<div id="divSidePanel"> 
    <div id="divMainMenu"> 
     <ul> 
      <li onclick="Show('Buyers')">Buyers 
       <ul id="Buyers" style="display:none;"> 
        <li>Search</li> 
        <li>Submit request</li> 
        <li>Send message to owner</li> 
       </ul> 
      </li> 
      <li>Sellers</li> 
      <li>Contact Us</li> 
     </ul> 
    </div> 
</div> 

Проблема: Когда я щелкаю по тексту Покупатели, он показывает суб/вложенный список. Однако другие элементы не занимают места для вложенного списка. Таким образом, вложенный список записывается в пространство основного списка.

Это проблема с моим кодом или это стандартный способ работы? И есть ли способ, позволяющий другим предметам «нажимать», уступая место вложенным элементам?

Спасибо!

+5

'PObj = document.getElementB yId (pObj) .id; '- эта линия делает меня facepalm. – ThiefMaster

+1

В случае, если вам интересно, почему: Если элемент не существует, он выдает ошибку, если он существует, он не работает, так как он в значительной степени равен «pObj = pObj». Используйте «var elem = document.getElementById (pObj)», а затем «elem.style ...» в следующем коде. – ThiefMaster

+0

@ThiefMaster Я не намерен поддерживать pObj таким образом. Это была незавершенная работа ... Во всяком случае, я попробовал и ваш метод, но не изменил никаких изменений. Также обратите внимание, что даже с pObj, когда я предупреждаю значение свойства display, он показывает «none». Так что технически это должно дать какой-то ответ. Кроме того, вместо того, чтобы говорить ** display = '' **, когда я пишу ** display = 'block' **, отображается список вложенных списков, но без расширений. – itsols

ответ

1

Возьмите это из вашего CSS:

#divMainMenu li ul{ 
    display: none; 
} 

И изменить height свойство min-height на вашем селекторе #divMainMenu li

результирующей CSS:

#divMainMenu ul { 
    list-style-type: none; 
    padding: 5px 0; 
    height:400px; 
} 
#divMainMenu li { 
    min-height: 17px; 
    margin: 3px 0; 
    padding: 14px 2px; 
    border: 1px solid #eee7cb; 
    background: url(../../Images/50pTransparent-20x20.png) repeat; 
} 
#divMainMenu li ul{ 

}​ 

Example

+0

Большое спасибо за то, что потратили время на это. Я также согласен, что нет смысла использовать библиотеку только для такой маленькой вещи. К сожалению, я не мог +1 вас на этом, так как ваш комментарий был удален. Еще раз спасибо! – itsols

+0

И еще одна вещь ... Я изменил ** # divMainMenu ul ** на ** min-height: 100px **, чтобы предотвратить его выполнение из div, предназначенного для меню :) – itsols

+0

помните, используя '#divMainMenu ul' соответствует всем 'ul', которые являются потомками' # divMainMenu'. В вашей ситуации это означает, что и внешняя, и внутренняя 'ul' совпадают. – SupremeDud

2

Вам необходимо использовать min-height: вместо height: в CSS. Если вы знаете jQuery, функции .hide() и .show() будут работать MUCH лучше.

+1

спасибо за ваш совет. Это всего лишь один из тех моментов, которые мне нужно сохранить очень легкий проект. И использование JQuery не является вариантом для этой задачи. Но да, я согласен, у него много возможностей - и да, я тоже использовал его :) +1 за ваш совет. – itsols

+0

Спасибо за ответ и +1. Я использую jQuery везде, но я понимаю, если вы не можете. – SomeKittens

Смежные вопросы