У меня ошибка IE, которую я не знаю, как исправить.
Использование jQuery Я динамически перемещаю меню для отображения элемента при наведении курсора.
Мой код (упрощенный) выглядит примерно так:
$j = jQuery.noConflict();
$j(document).ready(function()
{
//do something on the menu clicks
$j('div.ico').click(function() { alert($j(this).parent().html()); });
setUpActions('#tableId', '#menuId');
});
//on mouseover set up the actions menu to appear on mouseover
function setUpActions(tableSelector, menuSelector)
{
$j(tableSelector + ' div.test').mouseover(function()
{
//note that append will move the underlying
//DOM element with all events from it's old
//parent to the end of this one.
$j(this).append($j(menuSelector).show());
});
}
Похоже, что это меню неправильно регистрирует события для меню после его перемещения в IE7, IE8 и IE8-as-IE7 (да, MS, это действительно «новый движок рендеринга» в IE8, мы все вам верим) .
Работает как положено во всем остальном.
Вы можете увидеть поведение в базовой демонстрации здесь .
В демоверсии вы можете увидеть два примера выпуска:
- Изображение под кнопками должно меняться при наведении курсора (выполняется с помощью селектора CSS: hover). Он работает при первом наведении мыши, но затем сохраняется.
- Событие click не запускается - однако с помощью инструментов dev вы можете вызвать его вручную, и оно все еще подписано.
Вы можете увидеть (2) в инструментах разработчика IE8:
- Открыть страницу в IE8
- Open dev tools
- Выберите вкладку «Сценарий» и вложенную вкладку «Консоль»
- Введите:
$j('#testFloat div.ico:first').click()
для ручного вызова любых подписанных событий
- На странице будет предупреждение
Это означает, что я не теряю подписки на события, они все еще там, IE просто не вызывает их, когда я нажимаю.
Кто-нибудь знает, почему возникает эта ошибка (кроме как из-за почтенного движка IE)?
Есть ли обходной путь?
Может ли быть что-то, что я делаю неправильно, просто так работает, как и ожидалось во всем остальном?