0

我正在使用 jquery 工具 Tooltip 来创建工具提示。

我创建了一个这样的工具提示......一个工具提示,仅在单击时打开并在我按下关闭按钮时关闭(触发“closeTooltip”事件)。

$('#request_button').tooltip({
        opacity: 1.0,
        position: 'top center',
        offset: [10, 0],
        events: {
            def: "openTooltip, closeTooltip",
            tooltip: "undefinedEvent, closeTooltip"
        },
        onBeforeShow: function() {
            alert("I will hide the existing tooltips first");
            $('#request_button').trigger('closeTooltip');
        },
        onShow: function() {
            alert("I have shown the new tooltip");
        },
        onBeforeHide: function() {
            alert("I have started hiding existing tooltips");
        },
        onHide: function() {
            alert("I have hidden all existing tooltips");
        },
        tip: "#tooltip_contents" // I am using same div for multiple trigger elements
    });

我正在像这样打开/关闭工具提示..

$('#request_button').click(function() {
    $(this).trigger('openTooltip');
});
$('#close_tooltip').click(function() {
    $('#request_button).trigger('closeTooltip');
});

由于我定义了多个触发元素,我有必要关闭所有打开的工具提示。当我在 onBeforeShow() 事件中尝试这个时,它没有按照我想要的方式工作。

警报消息按以下顺序出现...

  • 我将首先隐藏现有的工具提示
  • 我已经展示了新的工具提示
  • 我已经开始隐藏现有的工具提示
  • 我隐藏了所有现有的工具提示

这样做是它也隐藏了当前的工具提示。我想要的顺序是...

  • 我将首先隐藏现有的工具提示
  • 我已经开始隐藏现有的工具提示
  • 我隐藏了所有现有的工具提示
  • 我已经展示了新的工具提示

我怎样才能做到这一点?我在这里做错了什么?

4

3 回答 3

2

我认为今天做了类似的事情。我正在使用事件:设置点击内容,因此无需为触发器编写点击函数。

onBeforeShow只是隐藏所有将成为工具提示的 div。

还附加在带有关闭链接的工具提示中。

$(".will-be-hidden").tooltip({
  onBeforeShow: function() { $('.unique-id').hide(); },
  events: { def: 'click, mouseout', tooltip: 'mouseover, click'},
  effect: 'slide',
  position: "center right",
  opacity: 0.7,
  relative: true,
  offset: [-20,-100],
  opacity: 1.0
}).dynamic({ right: { direction: 'left' } });

$('div.unique-id').append('<br /><br /><p style="cursor:pointer; color:#003B81">x click to close</p>');
于 2011-10-19T22:31:33.783 回答
1

好吧,现在它在隐藏之前显示出来。调用 onBeforeShow、onShow、onBeforeHide、onHide。我的假设是这是工具提示插件的运行方式。你说你想要的顺序是onBeforeShow,onBeforeHide,onHide,onShow,这是非常荒谬的。

我想你想要做的只是在显示当前工具提示之前隐藏所有工具提示,在这种情况下,你不能在触发工具提示的事件中这样做吗?就像是:

$("#request_button").click(function (e)
{
    e.preventDefault;
    $(".reference_to_tooltip_here").trigger("closeTooltip"); // or just .remove()/.hide();
    $(this).trigger("openTooltip");
});

这样在打开新工具提示之前所有工具提示都关闭了吗?如果没有任何选项可以隐藏插件功能中的其他工具提示,请忽略它附带的事件并让 jQuery 在打开之前关闭它们。

仅供参考,您目前拥有:

    onBeforeShow: function() {
    alert("I will hide the existing tooltips first");
    $('#request_button').trigger('closeTooltipEvent');

trigger('closeTooltip');我认为无论如何都需要。

于 2011-05-13T07:05:07.993 回答
0

对我有用的是以下代码...

$("#request_button").click(function (e)
{
    var tooltip_api = $(this).data('tooltip');
    if (tooltip_api.isShown(true)) {
        tooltip_api.hide();
    }
});

希望这可以帮助。

于 2011-05-16T00:58:46.103 回答