Подсказка jQuery-UI отображается после второго наведения мыши

0

У меня есть этот код:

(...)
if (data.hasSentMessages === true){
  $("#sentMessages")
    .parent()
    .removeClass("ui-state-disabled");
} else {
  $("#sentMessages")
    .parent()
    .addClass("ui-state-disabled");
}

И тогда, если элемент отключил класс, я хочу показать, почему элемент отключен в jQuery-UI Tooltip. Но, к сожалению, это проявляется после второго события mouseover. Когда я читаю это: всплывающая подсказка, не показывающая при первом наведении мыши, создаю что-то вроде этого:

$("#sentMessages").tooltip({disabled: !($("#sentMessages").parent().hasClass("ui-state-disabled"))});
if($("#sentMessages").data("tooltip") === false){
  $("#sentMessages").tooltip({disabled: !($("#sentMessages").parent().hasClass("ui-state-disabled"))}).triggerHandler("mouseover");
}

Это условие, если виджет не инициализирован, должен вручную запустить событие mouseover, но, к сожалению, он все еще не работает. Я буду очень рад, если кто-то захочет мне помочь - спасибо заранее.

Существует упрощенный Fiddle: jsFiddle, который показывает проблему, там вы можете видеть, что вторая подсказка хороша, но в первую очередь похожа на стандартную "подсказку браузера".

  • 0
    не могли бы вы предоставить скрипку?
  • 0
    @Anubhav, конечно, есть скрипка -> jsfiddle.net/v7Xnh/2 Это не работает, как мой веб, но там также вы можете увидеть, что при наведении мыши на второй курсор работает лучше, чем на первом

2 ответа

1
Лучший ответ

В вашей скрипке инициализация всплывающей подсказки происходит в функции обратного вызова мыши. Это будет означать, что всплывающая подсказка не создается только после первого события mouseover.

Во-вторых, событие mouseover встроено в то, как работает всплывающая подсказка jQueryUI. Таким образом, вы можете удалить код мыши.

В-третьих, вы упомянули, что всплывающая подсказка должна отображаться только тогда, когда родительский элемент имеет класс ui-state-disabled.

Посмотрите результат на JSFiddle.

// construct a tooltip for each sentMessages then listen for the 
// tooltipopen event an evaluate if it should show the tooltip
// or not
$("#sentMessages").tooltip().on('tooltipopen', function(){
    if ($(this).parent().hasClass('ui-state-disabled')){
        $(this).tooltip("enable");

    } else {
        $(this).tooltip("disabled");
    }
});

// comment out this line to replicate a non error state
$("#sentMessages").parent().addClass("ui-state-disabled");

Надеюсь, это поможет.

0

на основе вашего примера e.stopImmediatePropagation(): добавьте e.stopImmediatePropagation() в событие mouseover, см. обновленную скрипту:

  • 0
    Это не ожидаемое поведение - если вы видите мой Fiddle, вы можете видеть, что после второго события mouseenter всплывающая подсказка отображается под элементом <a>, но в приложении есть всплывающая подсказка jQueryUI - и то, как я хочу, подсказка будет вести себя. С e.stopImmediatePropagation () каждый раз, когда я вижу "стандартную" подсказку браузера.
  • 0
    прежде чем я обновлю свой ответ, проверьте здесь, если это то, что вы притворяетесь ?: jsfiddle.net/v7Xnh/4
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню