Функция Mouse Over не работает в первый раз после загрузки страницы - PullRequest
1 голос
/ 23 февраля 2012

У меня есть эта функция, где мне нужно показать всплывающую подсказку при наведении курсора мыши:

  content.live({
            mouseover: function () {
                if (settings.showButtons == false) {
                    content.hover(function () {
                        $('#' + settings.toolTipId).remove();
                        content.attr({ title: '' });
                        buildTipify();
                        positionTipify();
                    }, function () {
                        removeTipify();
                    });
                }
            },

Но когда страница загружается в первый раз, она не выскакивает, и если я щелкаю в любом месте на странице и, если я нажимаю на ссылку, появляется всплывающее окно.

Я думаю, что функция зависания внутри парения может быть той, которая делает каракули: (

Кто-нибудь может указать, что я делаю не так?

Вот моя демонстрация скрипки

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Проблема в том, что вы связываете событие наведения (технически mouseenter + mouseleave) только в случае наведения мыши для content.Итак, в первый раз, нет привязанного события hover, во второй раз, так что ваша всплывающая подсказка показывает.

Честно говоря, я не совсем понимаю все, что вы делаете с .live (): -почему вы используете делегирование событий для элемента (контента), который существует и остается?- почему вы привязываете свои события (щелчок или зависание) только при наведении курсора мыши и отпускании мыши.Это просто не имеет никакого смысла ...

Вот как я бы просто сделал это.Полностью удалите вызов .live () и выполните привязку непосредственно при наведении или событии щелчка в соответствии с settings.showButtons:

if (settings.showButtons == false) {
    content.hover(function() {
        $('#' + settings.toolTipId).remove();
        content.attr({
            title: ''
        });
        buildTipify();
        positionTipify();
    }, function() {
        removeTipify();
    });
} else {
    content.click(function(el) {
        // remove already existing tooltip
        $('#' + settings.toolTipId).remove();
        content.attr({
            title: ''
        });
        buildTipify();
        positionTipify();
        // Click to close tooltip
        $('#' + settings.closeTipBtn).click(function() {
            removeTipify();
            return false;
        });
        return false;
    });
}​

DEMO

Примечание: я немного изменил CSS для кнопки закрытия, потому что ваша кнопка была невидимой, поэтому я ее не видел.

1 голос
/ 23 февраля 2012

Ваше предположение верно.Проблема в том, что вы добавляете hover в закрытие mouseover.Хуже того, вы добавляете новое действие hover каждый раз, когда вы mouseover.Если вы хотите добавить наведение только тогда, когда settings.showButtons == false, тогда вы должны просто переместить его за пределы вашего live.

Кроме того, похоже, что у вас возникнет та же проблема с вашей функцией mouseleaveа также.

...