Можно ли сделать так, чтобы mouseenter не срабатывал в IE на DOMready? - PullRequest
3 голосов
/ 06 января 2011

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 06 января 2011

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

$(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
        });
    });
});

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


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

$(window).load(function(){
    $('#yourMenu').mouseenter(function() { // bind the mouseenter code
        // your code
    });
});
1 голос
/ 07 января 2011

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

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

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

...