Выпадающий список IE7 не отображается при первом нажатии после изменения имени класса в фокусе

#c# #javascript #asp.net #internet-explorer-7

#c# #javascript #asp.net #internet-explorer-7

Вопрос:

Я пытаюсь изменить класс CSS выпадающего списка в его событии onfocus, чтобы изменить цвет его фона.

Когда пользователь нажимает на выпадающий список, класс CSS изменяется (изменяется цвет фона), но список параметров не отображается, пока он не будет нажат снова.

Это происходит в IE7. Это отлично работает в Firefox.

Единственный совет, который я нашел где-либо по этой проблеме, предлагает также использовать событие onfocusin:

http://www.eggheadcafe.com/software/aspnet/34297064/open-dropdown-list-only-with-double-mouse-click.aspx

но это не возымело никакого эффекта.

Событие onfocus прикреплено к выпадающему списку в коде, лежащем в основе:

 ddl.Attributes.Add("onfocus", "setCssClass();");
  

Javascript устанавливает класс:

 ddl.className = "Class1";
  

Пожалуйста, помогите!

Ответ №1:

Спасибо всем, кто посмотрел на это, но я сам нашел ответ.

Проблема возникала только тогда, когда фокус исходил от нескольких конкретных элементов управления. У этих элементов управления были события onblur, которые также устанавливали класс выпадающего списка.

Я предполагал, что эти события onblur будут выполняться до onfocus / onfocusin, но, похоже, это не так. Затем события onblur, похоже, закрывают выпадающий список при применении изменения класса.

В любом случае, теперь я проверяю, какой элемент управления сфокусирован на этих событиях onblur, и если это выпадающий список, я не запускаю основную логику в onblur, и теперь все работает как ожидалось.

Ответ №2:

Ввод жестко запрограммированного события «onfocus» вынудит вас выполнить 2 нажатия при использовании Internet Explorer. Это известная особенность IE. Хотя это решение не идеально. Если у вас есть предупреждение, например, внутри этой анонимной функции при обратном вызове .focus(), вам все равно придется дважды щелкнуть выпадающий список. Вам просто нужно проявить творческий подход.

В качестве обходного пути просто используйте событие jQuery .focus.

jQuery([объект выпадающего списка]).фокус (функция() {

  ... put code here
  

});