这让我发疯。为什么removeEventListeners 不起作用?
类构造函数
public function item(brand:String, title:String, price:Number, mp:Number,
path:String, sb1:*, sb2:*):void
sb1:* 和 sb2:* 是对象 Hook 。
这些是分配的监听器:
_sb1.addEventListener("Changed", slideBarChanged); // Price
_sb2.addEventListener("Changed", slideBarChanged); // MegaPixels
该函数调用:
private function slideBarChanged(e:Event):void
{
switch(e.target.type)
{
case "Price":
if(int(e.target.currVal) > Math.abs(this.price))
{
this._active = false;
_sb2.removeEventListener("Changed", slideBarChanged);
}
else {
this._active = true;
_sb2.addEventListener("Changed", slideBarChanged);
}
break;
case "MegaPixels":
if(int(e.target.currVal) > Math.abs(this.mpixels))
{
this._active = false;
_sb1.removeEventListener("Changed", slideBarChanged);
}
else {
this._active = true;
_sb1.addEventListener("Changed", slideBarChanged);
}
break;
}
一切正常,但当项目变为 _active = false 时监听器不会被删除; 实际上,这应该像这样工作:
如果价格太高,就忽略百万像素,只听价格。 如果百万像素太高,则忽略价格,只听百万像素。
伤脑筋,非常感谢任何帮助。 谢谢。
最佳答案
尝试
e.target.removeEventListener("Changed", slideBarChanged);
与
相反_sb1.removeEventListener("Changed", slideBarChanged);
或
_sb2.removeEventListener("Changed", slideBarChanged);
另外,您应该为 addEventListener() 和 removeEventListener() 方法的类型参数解析常量而不是字符串文字。
const CHANGED:String = "changed";
_sb1.addEventListener(CHANGED, slideBarChanged);
_sb1.removeEventListener(CHANGED, slideBarChanged);
关于flash - as3 删除事件监听器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938989/