javascript - 如何将事件侦听器重新绑定到已删除并再次添加的元素
问题描述
我已经构建了一个非常复杂的滑块,现在必须构建它,以便可以根据选择将其删除并重新添加到页面中。我有一个简单的分页点击事件监听器来调用我所有的动画和计时器,看起来像这样
let $slideItems = $slideShow.querySelector('.slideshow-items'),
$slideshowNav = $slideShow.querySelector('.slideshow-nav'),
$slideshowNavButton = $slideshowNav.getElementsByTagName('button');
forEach($slideshowNavButton, (index, el) => {
el.addEventListener('click', function() {
let isActive = this.classList.contains('active');
if (!isActive) {
clearTimeout(timer);
slideshowClick($slideShow, this);
slideshowAnimations($slideShow, index);
slideTimer();
}
});
});
我使用 forEach 函数作为 for 循环来遍历我需要的所有元素,比如$slideShow
在页面上有多个 ',并将它们作为索引数组返回。我遇到的问题是我需要添加一个功能,其中$slideshowNav
和所有的$slideshowNavButton
s 都从函数外部的$slideshow
函数中删除和重建,并且无法弄清楚如何在不重复所有代码的情况下重新绑定 click 事件。有没有办法将此事件绑定到$slideshow
对象,类似于 jQuery.on
函数的工作方式,或者在创建后将 click 事件重新绑定到 new $slideshowNavButton
?我无法使用 jQuery,因此无法使用该.on
功能。
解决方案
由于您在没有视觉位置的情况下移动了太多课程,因此很难给您正确的答案,但希望这会有所帮助:
var btnWraper = document.querySelectorAll('.btnWraper > button');
btnWraper.forEach(function(e){
e.onclick = buttonClicking;;
})
let remake = document.getElementById('reMakeMe');
remake.addEventListener('click', function(){
var btnWraper = document.querySelectorAll('.btnWraper > button');
//if deleted
if(!btnWraper.length)
{
createButtons('Btn1');
createButtons('Btn2');
createButtons('Btn3');
createButtons('Btn4');
}
},false)
let rest = document.getElementById('resetMe');
rest.addEventListener('click', function(){
var btnWraper = document.querySelectorAll('.btnWraper > button');
btnWraper.forEach(function(e){
e.remove();
})
},false) ;
function buttonClicking (){
alert(this.innerHTML);
}
function createButtons(value){
var btn = document.createElement("button");
btn.innerHTML = value;
btn.onclick = buttonClicking;
var parentElement = document.getElementsByClassName("btnWraper")[0];
parentElement.appendChild(btn);
}
<div class="btnWraper">
<button>Btn1</button>
<button>Btn2</button>
<button>Btn3</button>
<button>Btn4</button>
</div>
<div>
<button id="resetMe">Reset All</button>
<button id="reMakeMe">ReMake All</button>
</div>
推荐阅读
- reactjs - 使用 react useffect 获取数据,然后根据之前获取的数据进行下一次获取
- python - 生成列的 SQLAlchemy 动态构造
- ios - 应用内购买仅在首次应用启动时失败
- javascript - HTML Navbar Scroll Trigger 无法同时获得样式和动画
- mongodb - MongoDB: How to find specific value in nested array, if found then show only that array not all?
- reactjs - 在 React Router 中处理来自 Wordpress API 页面内容的静态链接
- javascript - 使用不和谐机器人发送随机文件
- python - PyTorch .to(torch.device("cuda")) 速度因执行状态而有很大差异 - 如何实现加速?
- django - 带有图标的动态过滤器添加
- android - GpuImage 无法正确渲染