【发布时间】:2017-02-02 05:10:22
【问题描述】:
在我的应用程序中,有几个按钮可以触发我的函数 loadObj(a)。该函数主要使用 Three.js 库加载对应的 3D 对象。
当我选择一个对象并单击相应的按钮时,会出现一组三个额外的按钮,允许我加载所选对象的三个变体。下面的代码使用 addEventListener 已经适用于这种情况。
当我选择一个不同的对象时出现了我的问题,这再次触发了下面的代码。然后,如果我单击新选择对象的额外按钮之一,它会加载正确的对象,但也会加载前一个对象。如果我选择第三个对象,如果我单击一个额外的按钮,它不仅会加载相应的对象,还会加载前两个。
我读到 addEventListener 以累积的方式工作,其中的功能只是不断地累加。因此,每次运行下面的循环时,它都会添加一个新的 loadObj,其中包含新模型的路径到任何其他以前的 loadObj。
有没有办法覆盖 addEventListener 中的函数?在添加新的之前,我需要从 addEventListener 中删除以前的 loadObj。
//Solve the scope/closure problem to able to call loadDress inside the "for" loop below
function delegate(a) {
return function(){
loadObj(a)
}
}
for(var item in paths){
document.getElementById("size" + item).style.display = "inline-block";
document.getElementById("size" + item).addEventListener("click", delegate(paths[item]), false);
}
【问题讨论】:
标签: javascript delegates addeventlistener