0

创建弹出框后,我调用了tippy() 构造函数,例如:tippy('.my-tippy-popover', { ... }); 但这又再次创建了所有现有的tippy popovers。因此,如果您有 80 个弹出框并添加了一个新弹出框,则 tippy() 构造函数将创建 81 个新弹出框。如果您单击其中一个弹出窗口,您将获得 2 倍的事件,例如 onShow。如果您现在再次添加一个新的弹出框并运行tippy() 构造函数并在弹出框之后单击,您将获得3x onShow 事件。等等。所以它添加了越来越多的事件监听器。我怎样才能避免这种情况?编辑jsfiddle

jQuery(($) => {
runTippy()
})

function runTippy() {
tippy('.my-tippy-popover', {
    content(reference) {
        const id = reference.getAttribute('data-template');
        const template = document.getElementById(id);
        return template.innerHTML;
    },

    onHide(instance) {
        console.log('+++ tippy onHide +++')
    },
    onCreate(instance) {
        console.log('+++ tippy onCreate +++')
    },
    onShow(instance) {
        console.log('+++ tippy onShow +++')
    },
    onShown(instance) {
        console.log('+++ tippy onShown +++')
    },
    allowHTML: true,
    trigger: 'click',
    appendTo: document.getElementById('tippy-container'),
    interactive: true,
    interactiveBorder: 10,
    interactiveDebounce: 35,
    maxWidth: 'none',
    });
}

function addPopover() {
const body = $('body');
body.append(`<span class="my-tippy-popover" data-template="tippyContent" >Popover</span><br>`);
runTippy()
}
4

0 回答 0