способ узнать, не соответствуют ли опции внутри выбора - в IE - PullRequest
5 голосов
/ 13 октября 2009

В IE6 и, возможно, в 7, если вы устанавливаете ширину a в любое значение, отличное от auto, если параметры внутри этого выбора шире, чем ширина выбора, они обрезаются. это плохо. Firefox достаточно умен, чтобы этого не делать.

Вопрос: Как я могу сказать, что варианты обрезаются с помощью JavaScript?

Как вы справились с этой проблемой, кроме настройки ширины на авто?

Ответы [ 2 ]

5 голосов
/ 13 октября 2009

Хороший вопрос. Немного разглагольствования здесь, но реализация IE <select> элементов управления ужасна. У него есть следующие проблемы (среди прочего я уверен):

  • (как вы заметили) установка ширины на <select> обрезает <option> элементов независимо от overflow инструкций
  • у них есть эта магическая способность сидеть поверх всех других элементов управления на странице , независимо от положения и инструкций наслаивания (z-index). Это была огромная PITA для ранних разработчиков виджетов "диалога"; любые выпадающие списки за диалоговым окном будут выходить за пределы самого диалогового окна.
  • вы не можете отключить отдельные <option> элементы
  • вы не можете скрыть / показать отдельные <option> элементы
  • <select> не отражает стили CSS, установленные для выбранного <option>
  • не может установить для свойства innerHTML строку новых элементов параметров
  • если вы сделаете , а не , установите атрибут value для каждого <option>, mySelectBox.value молча завершится неудачей
  • при использовании стрелок на клавиатуре для навигации по списку элементов <option> событие change срабатывает при каждом нажатии клавиши (в Opera тоже есть эта проблема)
  • CSS-стили на <option> с и <optgroup> с, как правило, полностью игнорируются ( только backgound-color и color работа )
  • программно изменяющий список опций скрывает раскрывающийся список (это отстой для попыток реализации типа «впереди», которые хотят, чтобы раскрывающийся список оставался видимым)
  • IE7 пытается разместить все параметры на экране, когда отображается. Для больших списков это означает, что содержимое раскрывающегося списка будет располагаться поверх раскрывающегося списка при отображении (это само по себе не является неправильным, но оно несовместимо с другими версиями IE)

Что касается вашей проблемы, то одним из решений является переключение width на "auto", когда отображаются параметры, и задание возврата на заданную ширину, когда параметры закрыты, как показано здесь: http://css -tricks.com / выберите обрезки-Офф-варианту-в-т затруднительного /

Очевидный недостаток этого состоит в том, что винты увеличивают поток документа, поскольку все соседние элементы перемещаются, чтобы учитывать настройку width:auto.

1 голос
/ 13 октября 2009

Взгляните на этот пост Криса Койера.

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