AJAX 成功后在 tooltipster 中更新 html 内容

Posted

技术标签:

【中文标题】AJAX 成功后在 tooltipster 中更新 html 内容【英文标题】:Updating html content in tooltipster after AJAX success 【发布时间】:2019-01-07 19:35:54 【问题描述】:

我在单击触发器图标时打开的工具提示器中有交互式 html 内容。通过 AJAX 提交数据后,我希望将工具提示的内容替换为返回的 data。 虽然显示了返回的数据,但工具提示此时已关闭,并且仅在将鼠标悬停在原始打开触发器上时才可见。

这是我的工具提示器的 jQuery:

$(document).ready(function() 
    $(".layout-save").click(function(e) 
        e.preventDefault();     
        var form = $(".image_define");
        var params = form.serializeArray();
        var formData = new FormData();
        formData.append('default_image', $('#default_image')[0].files[0]);

        $(params).each(function (index, element) 
            formData.append(element.name, element.value);
        );

        $.ajax(
            url: form.attr('action'),
            method: "post",
            data: formData,
            contentType: false,
            processData: false
        )
        .done(function(data) 
            $('.tooltip-imageHandler-<?php echo $products_filter; ?>').tooltipster('destroy');
            $('.tooltip-imageHandler-<?php echo $products_filter; ?>').tooltipster( 
                content: data,
                contentAsHTML: 'true'
            );
        )
        .fail(function() 
            alert('Ajax Submit for New Image Save Failed ...'); 
        );
    );
);

我认为是 .tooltipster('destroy') 正在关闭工具提示,但如果我尝试替换内容而不首先使用 destroy,我会收到一条错误提示

Tooltipster:一个或多个工具提示已附加到元素 以下。忽略。

是否可以在不关闭工具提示器的情况下替换我的内容?

【问题讨论】:

【参考方案1】:

试试这个:

$('.tooltip-imageHandler-&lt;?php echo $products_filter; ?&gt;').tooltipster('update', data);

【讨论】:

这会在控制台中出现未捕获错误:未知方法“更新” github.com/iamceege/tooltipster/issues/370 参考链接。你有你的答案 如原始问题所示,我已经尝试过.tooltipster('content', 'new content'),但是如果不先清除原始内容,这将不起作用。使用 'destroy' 的问题是当它被触发时工具提示会关闭。添加“重新定位”无济于事,因为工具提示仍处于关闭状态,并且仅当您将鼠标悬停在触发器图标上时才会显示替换的内容。如果有办法在内容被替换后强制工具提示重新打开,则该方法可能可用。【参考方案2】:

为了其他可能想要这样做的人的利益,我这样解决了这个问题:

.done(function(data) 
            $('.tooltip-imageHandler-<?php echo $products_filter; ?>').tooltipster('destroy');
            $('.tooltip-imageHandler-<?php echo $products_filter; ?>').tooltipster( 
            content: data,
            contentAsHTML: 'true',
            interactive: 'true'
            );
            $('.tooltip-imageHandler-<?php echo $products_filter; ?>').tooltipster('open');
            $('.tooltip-imageHandler-<?php echo $products_filter; ?>').tooltipster('reposition');
)

【讨论】:

【参考方案3】:

tooltipster 文档有一个更新方法'content',第二个参数可以传递您的设置或只是一行新文本。 示例:

.im_tooltip 
  display:block;
  width: 100px;
  height: 20px;
  background-color: tomato;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/js/jquery.tooltipster.min.js"></script>

<div class="im_tooltip" title="I'm default init tooltip">Hover me</div>

<button class="change" type="button">Update tooltip</button>

<script>
  $('.im_tooltip').tooltipster();

  $('.change').on('click', function()
    $('.im_tooltip').tooltipster('content', 'I am change content in tooltip');
  )
</script>

【讨论】:

以上是关于AJAX 成功后在 tooltipster 中更新 html 内容的主要内容,如果未能解决你的问题,请参考以下文章

Tooltipster 在 ajax 内容中不起作用

Jquery Tooltipster - ajax 后访问 DOM

Ajax 更新后在 jQuery 中重新绑定事件(更新面板)

Ajax 更新后在 jQuery 中重新绑定事件(更新面板)

Tooltipster 在开始时无法正常工作

JQuery Ajax 更新 MySQL 数据库,但没有运行成功函数