我正在尝试删除我添加到UserDefaults.standard.set(sender.isOn, forKey: "aaaSwitch")
的事件监听器;这样听众函数只会在第一次点击时触发,并在此之后被清除。
有没有办法用纯粹的js做到这一点?
UL
答案 0 :(得分:1)
只需向事件监听器添加{Once:true}选项即可。不需要为它编写代码。只需尝试这些
cardDeck[i].addEventListener('click', flip, {once:true} )
这是jsfiddle link
此参考链接。Here
PS: 将evenListener添加到每个元素的方式效率不高。如果可能,请使用委托代替冒泡用于您的用例。这是delegation
的小提琴答案 1 :(得分:0)
您可以绑定到onclick
方法,而不是使用addEventListener
。因此,在执行点击后,只需将onclick
设置为null
:
var cardDeck = document.getElementById('listDeck').getElementsByTagName('li')
for (var i = 0; i < cardDeck.length; i++) {
cardDeck[i].onclick = flip.bind(cardDeck[i])
}
function flip(e) {
if (e.target && e.target.nodeName == "LI") {
var firstMove = document.getElementById(e.target.id)
firstMove.classList.add('open', 'show')
console.log(e.target.id + 'card was clicked');
this.onclick = null;
}
}
答案 2 :(得分:0)
如果您通过addEventListener
添加了事件处理程序,则可以使用以下命令将其删除:
element.removeEventListener(event, function);
这允许您有选择地删除事件处理程序,而不删除任何其他可能已注册的处理程序。
function flip(e) {
if (e.target && e.target.nodeName == "LI") {
var firstMove = document.getElementById(e.target.id);
firstMove.classList.add('open', 'show');
console.log(e.target.id + 'card was clicked');
e.currentarget.removeEventListener('click', flip);
}
}
答案 3 :(得分:0)
如果要在调用事件监听器时删除它,可以在DOM元素上使用removeEventListener
,如下所示:
var cardDeck = document.getElementById('listDeck').getElementsByTagName('li')
for (var i = 0; i < cardDeck.length; i++) {
cardDeck[i].addEventListener('click', flip, false)
}
function flip(e) {
//remove the event listener.
this.removeEventListener("click",flip);
if (e.target && e.target.nodeName == "LI") {
var firstMove = document.getElementById(e.target.id)
firstMove.classList.add('open', 'show')
console.log(e.target.id + 'card was clicked');
}
}