【发布时间】:2018-10-02 20:10:08
【问题描述】:
我有一个元素,它有两个根据他的类名触发的事件监听器。在 click 事件期间,他的 className 正在发生变化,并且这个另一个类有自己不同的事件侦听器。每次点击应该交替触发两个事件。
在第一次点击监听器调用函数editClub,但所有接下来的点击调用两个函数。我不知道为什么会触发删除类事件。也许是因为在每个事件函数 callListeners 执行后,一个对象上有多个监听器?但应该只触发一次。后来我写了 removeListeners 函数,它删除了所有现有的监听器,并让她在 callListeners 函数之前调用。但是每次点击都会执行editClub函数。我的代码有什么问题?
function callListeners()
{
if ( document.getElementsByClassName('editBtn') )
{
let x = document.getElementsByClassName('editBtn');
for ( let i = 0; i < x.length; i++ )
{
x[i].addEventListener('click', editClub);
}
}
if ( document.getElementsByClassName('saveBtn') )
{
let x = document.getElementsByClassName('saveBtn');
for ( let i = 0; i < x.length; i++ )
{
x[i].addEventListener('click', saveClub);
}
}
}
function editClub(event)
{
event.preventDefault();
this.setAttribute('src','img/\icon_save.png');
this.setAttribute('class','saveBtn');
//removeListeners(); <-- here I placed removeListeners function
callListeners();
}
function saveClub(event)
{
event.preventDefault();
this.setAttribute('src', 'img/\icon_edit.png');
this.setAttribute('class', 'editBtn');
//removeListeners(); <-- here I placed removeListeners function
callListeners();
}
【问题讨论】:
标签: javascript dom-events