将滚动事件处理程序附加到动态创建的元素
Attach scroll event handler to an dynamically created element
我正在使用 simplescroll bar (SSB),它会在页面加载时围绕我的滚动内容添加包装器。我需要附加一个事件侦听器,它将在滚动时工作。
没有 SSB 一个简单的
document.querySelector(".element").parentNode.addEventListener('scroll', handler);
有效。但是现在不行了,因为右边的.parentNode
还没有,以后SSB会在后台加上(不知道什么时候,不知道怎么做,我也没有)控制它)。
如何将滚动处理程序附加到动态创建的(不是我创建的)元素?
对于点击事件,我确实使用了这样的函数
function addPostponedEventListener(selector, eventName, handler)
{
document.addEventListener(
eventName,
e =>
{
const el = e.target;
if (el.closest(selector))
{
handler();
}
}
)
}
addPostponedEventListener('.element', 'scroll', handler);
但它只对冒泡有效,而且滚动事件似乎禁用了冒泡,所以它不起作用。
感谢 this answer 我能够做到:
function addPostponedEventListener(selector, eventName, handler)
{
let interval = setInterval(() =>
{
let el = document.querySelector(selector);
if (el)
{
el.addEventListener(eventName, handler);
clearInterval(interval);
}
}, 100);
}
我正在使用 simplescroll bar (SSB),它会在页面加载时围绕我的滚动内容添加包装器。我需要附加一个事件侦听器,它将在滚动时工作。
没有 SSB 一个简单的
document.querySelector(".element").parentNode.addEventListener('scroll', handler);
有效。但是现在不行了,因为右边的.parentNode
还没有,以后SSB会在后台加上(不知道什么时候,不知道怎么做,我也没有)控制它)。
如何将滚动处理程序附加到动态创建的(不是我创建的)元素?
对于点击事件,我确实使用了这样的函数
function addPostponedEventListener(selector, eventName, handler)
{
document.addEventListener(
eventName,
e =>
{
const el = e.target;
if (el.closest(selector))
{
handler();
}
}
)
}
addPostponedEventListener('.element', 'scroll', handler);
但它只对冒泡有效,而且滚动事件似乎禁用了冒泡,所以它不起作用。
感谢 this answer 我能够做到:
function addPostponedEventListener(selector, eventName, handler)
{
let interval = setInterval(() =>
{
let el = document.querySelector(selector);
if (el)
{
el.addEventListener(eventName, handler);
clearInterval(interval);
}
}, 100);
}