2013-02-08 146 views
0

我不能刪除rute_button的事件,rute_button.removeEventlistener不起作用。 函數tampil_rute(t)有什麼問題嗎?謝謝..Can not removeEventlistener

function tampil(t) 
{ 
    rute_button.addEventListener(MouseEvent.CLICK, tampil_rute(t)); 
    //tampil_rute(t); 
    var _loadertampil:URLLoader = new URLLoader(); 
    var _datatampil:XML = new XML(); 
    _loadertampil.addEventListener(Event.COMPLETE, readXMLtampil); 
    _loadertampil.load(new URLRequest("http://localhost/mall_baru/tampil2.php?id="+t)); 
    function readXMLtampil(evttampil:Event) 
    { 
    _datatampil = new XML(evttampil.target.data); 
    var tampilanx = _datatampil..tenant_name; 
    tampilan.text = String(tampilanx); 
    trace("tampilan ="+tampilanx); 
    } 
} 
function tampil_rute(t) 
{ 
    return function(f:MouseEvent) 
    { 
    var c = t.split("_", 2); 
    var d:String = String(c[0]); 
    var e:Number = Number(c[1]); 
    for(var i:Number=1; i<=e; i++) 
    { 
     tambahan_tampil_rute(d,i); 
    } 
     rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute(t)); 
    } 
} 
function tambahan_tampil_rute(d, i) 
{ 
    this["rute_"+d+"_"+i].visible=true; 
} 
+0

哪裏的rute_button被定義? – Jono

+0

上功能tampil(t) – dikagaulzzz

回答

1

的問題是由tampil_rute(t)返回的功能,每次調用此函數,這是返回類型功能的一個新的對象,如果你想刪除的事件偵聽器,您必須確保傳遞相同對象(Function)爲removeEventListener函數。

你能解決這個問題如下:

function tampil_rute(t) 
{ 
    var listener:*; // create a variable to store your listener reference 

    listener = function(f:MouseEvent) 
    { 
     var c = t.split("_", 2); 
     var d:String = String(c[0]); 
     var e:Number = Number(c[1]); 
     for(var i:Number=1; i<=e; i++) 
     { 
      tambahan_tampil_rute(d,i); 
     } 

     rute_button.removeEventListener(MouseEvent.CLICK, listener); // Put the reference here 
    } 

    return listener; // Return the listener here 
} 
+0

謝謝@fenixkim它的工作... – dikagaulzzz

+0

不客氣。 :P – fenixkim

1

fenixkim是正確的,由匿名函數返回的事件處理程序不可訪問,因爲沒有對它的引用。

然而,另一種解決方案是將t存儲在變量中。這樣,我們消除了對匿名函數的需求,並簡化了事件處理程序的移除。

var t; 

function tampil(t) 
{ 
    this.t = t; 
    rute_button.addEventListener(MouseEvent.CLICK, tampil_rute); 
    // rest of code 
} 

function tampil_rute(e:MouseEvent) 
{ 
    var c = t.split("_", 2); 
    var d:String = String(c[0]); 
    var e:Number = Number(c[1]); 
    for(var i:Number=1; i<=e; i++) 
    { 
     tambahan_tampil_rute(d,i); 
    } 
    rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute); 
} 
0

您不通過添加/刪除eventListener的參數。

rute_button.addEventListener(MouseEvent.CLICK, tampil_rute); 
rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute); 
+0

嗯,但我必須將參數傳遞給其他功能.. – dikagaulzzz