0

rute_button のイベントを削除できません。rute_button.removeEventlistener が機能しません。関数 tampil_rute(t) について何か問題がありますか? ありがとう..

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;
}
4

3 に答える 3

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);
}
于 2013-02-08T02:34:32.930 に答える
1

問題は によって返された関数にありtampil_rute(t)ます。この関数を呼び出すたびに、関数型の新しいオブジェクトが返されます。イベント リスナーを削除する場合は、必ず同じオブジェクト (関数) を関数に渡す必要があり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
}
于 2013-02-08T02:52:01.667 に答える
0

add/remove eventListener のパラメーターを渡さないでください。

rute_button.addEventListener(MouseEvent.CLICK, tampil_rute);
rute_button.removeEventListener(MouseEvent.CLICK, tampil_rute);
于 2013-02-08T02:41:19.133 に答える