У меня есть этот код:
(...)
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, который показывает проблему, там вы можете видеть, что вторая подсказка хороша, но в первую очередь похожа на стандартную "подсказку браузера".
В вашей скрипке инициализация всплывающей подсказки происходит в функции обратного вызова мыши. Это будет означать, что всплывающая подсказка не создается только после первого события 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");
Надеюсь, это поможет.
на основе вашего примера e.stopImmediatePropagation()
: добавьте e.stopImmediatePropagation()
в событие mouseover, см. обновленную скрипту: