我(制作工具工具)如何接管JavaScript中的现有或将来的EventListener?

问题描述 投票:0回答:1
我使用

-tooltipster在我的网站上制作tooltips。 当悬停元素时,他们会在气泡中显示内容。 touch设备

但是

..由于没有悬停,工具提示显示在

TAP

上。但是,像点击触发器链接一样的点击像点击一样。我是通过使工具推动器接管该元素的href并在临时创建的元素上显示在工具提示内的the绕而解决此问题。

没有问题的工作。 现在js点击事件呢?

I在网站上没有JS AddEventListener制造的元素。有时在JS中激活工具刀片之前,有时甚至在Ajax之后都可以进行此操作。
更多的Genreal问题 这不一定是特定于工具的。我可以做那部分。问题是,如何首先转移eventlisteners?
我在这些元素上设置了某个类,并将EventListeners放入JS地图中?如果是这样,那么如何将其传输到工具提示内部的元素而不会失去目标?

或这可能只是错误的编码,就像首先是错误的方法吗?也许问题是错误的,我需要另一种方法? 所有的帮助都非常感谢!

下面有代码,但不一定相关:

href
    

event捕获

noither

jquery

nor

tooltipster
可以解决此问题,但是使用普通JavaScript有一个解决方案。

当初始化工具提示时,我们可以在父元素上进行点击事件。这样可以确保我们的处理程序优先于其他人,甚至其他捕获的处理程序。然后通过编程触发该事件,呼叫

Stopimmediatiatepropagationnitions。

最有可能,我们希望选择性地应用此修复程序,示例代码通过检查工具提示上的

<a>

类来做到这一点:

href

demo

javascript dom event-listener tooltipster
1个回答
0
投票

isTouch = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0) $('.tooltip' + (isTouch?':not(.ajx)':'')) .tooltipster({ debug:true, animation: 'grow', interactive:true, repositionOnScroll:true, contentAsHTML : true, //trackOrigin:true, //performance! delay: 200, trigger: 'custom', triggerOpen: { click: true, mouseenter: true, tap: true }, triggerClose: { mouseleave: true, click: true, tap: true } }) /***** Don't open tooltips of parents ****/ //click (parent events comes after child) .has('.tooltip') .tooltipster('option' , 'functionBefore' , (inst, helper) => { //console.log('functionBefore', helper) if (helper.event && !helper.event.target?.isEqualNode(helper.origin)) return false;//console.log(helper.event)//.stop() }) //hover (child events comes after parent) .children('.tooltip') .tooltipster('option' , 'functionBefore' , (inst, helper) => { //console.log('functionBefore', helper) $(helper.origin).parents('.tooltip').tooltipster('close') }) .tooltipster('option' , 'functionAfter' , (inst, helper) => { //console.log('functionAfter', helper) //If hover out on or via parent if (helper.event.relatedTarget?.classList.contains('tooltip')) $(helper.event.relatedTarget).tooltipster('open') })

stop-propagation $.tooltipster.on('init', (event) => { event.origin.parentElement.addEventListener('click', (e) => { if (e.target.classList.contains('stop-propagation')) { e.stopImmediatePropagation(); e.preventDefault(); $(e.target).tooltipster('open'); } }, true) // <-- use capture });

© www.soinside.com 2019 - 2025. All rights reserved.