2011-01-06 2 views
3

jQuery emulates IE's mouseenter event на не-IE браузерах. В IE, однако, mouseenter запускается при загрузке страницы (возможно, из-за использования jQuery doScroll в реализации $.ready), даже если мышь вообще не перемещается.Можете ли мышь, чтобы он не срабатывал в IE на DOMready?

Это не происходит в других браузерах и, безусловно, не следует Microsoft's own spec, который говорит (курсив мой): только

Пожаров событий, если указатель мыши находится вне границ объекта и пользователь перемещает указатель мыши внутри границ объекта. Если указатель мыши находится внутри границ объекта, то для события, которое должно быть выполнено, пользователь должен переместить указатель мыши за пределы объекта, а затем обратно внутри границ объекта.

Это становится только вопрос практичности, если парить (или плагин hoverIntent) применяется к навигационному пункту, чтобы отобразить раскрывающийся или «мега-меню»: В IE, MouseEnter будет стрелять сразу после $.ready, заслоняя содержимое с помощью меню.

+0

Ищет этот ответ тоже. –

ответ

1

Я нашел одно рабочее решение: Есть ли привязка в более поздней теме:

jQuery(function ($) { 
    setTimeout(function() { 
     /* bind with hoverIntent */ 
    }, 0); 
}); 

В прошлом это фиксируется так многие проблемы IE для меня (элементы формы не готовы), которые jQuery должен испечь в $.ready.

3

Вы могли бы сделать привязку на первом MouseMove событие, а не на DOM готовы:

$(document).ready(function() { 
    $(this).one('mousemove', function() { // only on the first time the mouse is moved 
     $('#yourMenu').mouseenter(function() { // bind the mouseenter code 
      // your code 
     }); 
    }); 
}); 

Это немного Hacky, но я думаю, что он должен работать.


Мне нравится решение проблемы с использованием setTimeout. Еще одно решение может быть сделать обязательными $(window).load() вместо:

$(window).load(function(){ 
    $('#yourMenu').mouseenter(function() { // bind the mouseenter code 
     // your code 
    }); 
}); 
+0

См. Примечание «Добавлено». mousemove уволен на $ .ready() на каждый элемент, к которому я привязал его. –

+0

'$ (window) .load (function() {...});' работал для меня. – seangates

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

  • Нет связанных вопросов^_^