Раскрывающийся список IE7 не отображается при первом нажатии после изменения имени класса на фокусе - PullRequest
1 голос
/ 18 мая 2011

Я пытаюсь изменить класс 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";

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

Ответы [ 2 ]

1 голос
/ 19 мая 2011

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

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

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

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

0 голосов
/ 23 мая 2011

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

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

jQuery ([объект выпадающего списка]). Focus (function () {

 ... put code here

});

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