Плагин jQuery qtip: старое всплывающее окно все еще отображается за новым всплывающим окном. Как это решить?

Это jQuery 1.9.0. Я использую qTip 1.0.0-rc3, из которого я удалил весь код $.browser (поскольку он исчез с версии 1.9.0). Прикрепляю простой голый (пока даже не рестайлинговый) наконечник. Полная функция ниже:

// Function to report a parse error
function reportParseError(parseError, msgHandle, textArea)
{
    // Find the inner link element -- there is only one, so this is "safe".
    var link = msgHandle.find("a");

    link.text("line " + parseError["line"]);

    // Add an onclick hook to the link. When clicking on the link, the caret
    // in the text area will move to the position of the error.
    link.on("click", function(e)
    {
        e.preventDefault();
        textArea.focus().setCursorPosition(parseError["offset"]);
    });

    link.qtip({
        content: parseError["message"],
        show: "mouseover",
        hide: "mouseout",
        position: {
            corner: {
                target: "topMiddle",
                tooltip: "bottomMiddle"
            }
        }
    });

    // Show the message
    msgHandle.show();
}

Эта функция делает то, что я хочу (подсказка появляется над ссылкой).

Проблема заключается в том, что предыдущее содержимое для подсказки (сообщения об анализе могут быть довольно большими) было больше, чем новое содержимое: тогда я вижу старое содержимое под новым при наведении курсора (оба содержимого исчезают при наведении курсора).

Как это решить?

Изменить: после некоторого размышления оказывается, что наблюдаемое поведение ожидаемо: каждый раз, когда эта функция запускается, создается новая всплывающая подсказка. Это означает, что подсказка должна быть прикреплена во время «инициализации» (т. е. когда document.ready()) и заполнена соответствующим содержимым, когда это необходимо. Я правильно понимаю?


person fge    schedule 22.01.2013    source источник
comment
Вы видите две подсказки при наведении курсора на один и тот же элемент?   -  person matthewpavkov    schedule 22.01.2013
comment
Да, точно. Я подозреваю, что на самом деле их больше двух, и все старые qtips все еще лежат ниже, но я могу ошибаться.   -  person fge    schedule 22.01.2013
comment
Что такое link в вашем коде? Откуда это?   -  person matthewpavkov    schedule 22.01.2013
comment
Это элемент DOM типа a. Я вставлю больше кода.   -  person fge    schedule 22.01.2013
comment
Согласен, используйте qTip 2. Также я считаю, что вам нужно прикреплять qTip к каждому элементу отдельно: link.each(function() { $(this).qtip(); });   -  person matthewpavkov    schedule 22.01.2013
comment
@matthewpavkov ссылка - это один и только один элемент   -  person fge    schedule 22.01.2013
comment
@Juhana, потому что я новичок в JavaScript, а qtip 2 не так хорошо документирован, как 1 - пока (редактировать: упс, не видел вики)   -  person fge    schedule 22.01.2013
comment
Вы создаете новый div для qTip каждый раз, когда запускается reportParseError(). Итак, старое сообщение все еще находится в DOM. Когда вы наводите курсор на ссылку, вы видите все подсказки, прикрепленные к этой ссылке.   -  person matthewpavkov    schedule 22.01.2013
comment
Итак, допустим, я использую qtip2: как прикрепить подсказку во время загрузки, а затем изменить ее содержимое?   -  person fge    schedule 22.01.2013
comment
@matthewpavkov Я вроде понял, что это так. Проблема сейчас в том, что я не знаю, как избежать этого в коде.   -  person fge    schedule 22.01.2013
comment
Ну, простым подходом будет destroy qtip каждый раз, когда он скрыт: craigsworks.com /projects/qtip/docs/api/#destroy Затем он будет каждый раз создаваться заново. Также есть способ обновить содержимое qTip: craigsworks.com/projects/qtip/docs /api/#updateContent   -  person matthewpavkov    schedule 22.01.2013
comment
Я бы предпочел пойти вторым путем... Хотя я не могу получить дескриптор qtip :(   -  person fge    schedule 22.01.2013


Ответы (1)


ОК, ответьте себе.

Я вообще не мог заставить работать qTip2, так что это qTip 1.

Проблема заключалась в том, что, как я обнаружил, всплывающие подсказки (фактически div) создавались, но никогда не уничтожались.

Решение состояло в том, чтобы создать две фиктивные всплывающие подсказки в document.ready() и уничтожить их прямо перед их воссозданием, поскольку я не мог взять дескриптор всплывающих подсказок, чтобы обновить их содержимое.

person fge    schedule 22.01.2013