1

私はこれをしたい:

if (rightBtn.addEventListener(MouseEvent.CLICK,goRight4))
{
rightBtn.removeEventListener(MouseEvent.CLICK,goRight4);
trace("YES")
}
else{trace("NO")}

上記は、ボタンに書き込むコードです。

eventListener を追加しましたが、結果はまだトレース NO です。

これを行うためのアイデアや適切な方法はありますか?

また、rightBtn に MOUSE_OVER、MOUSE_OUT などの複数のイベントがある場合はどうなるでしょうか。たった1つのコマンドでそれらをすべて削除できますか?

rightBtn.addEventListener(MouseEvent.CLICK,goRight4)
rightBtn.addEventListener(MouseEvent.MOUSE_OVER,goRightOver)
rightBtn.addEventListener(MouseEvent.MOUSE_OUT,goRightOut)

if (rightBtn.addEventListener(MouseEvent.CLICK,goRight4))
{
rightBtn.removeEventListener(MouseEvent.CLICK,goRight4);
rightBtn.removeEventListener(MouseEvent.MOUSE_OVER,goRightOver);
rightBtn.removeEventListener(MouseEvent.MOUSE_OUT,goRightOut);
trace("YES")
}
else{
trace("NO")
}
4

2 に答える 2

4

次のように、オブジェクトにイベントリスナーが追加されているかどうかを確認できますhasEventListener()

if(rightBtn.hasEventListener(MouseEvent.CLICK))
{
    rightBtn.removeEventListener(MouseEvent.CLICK, goRight4);
    trace("YES");
}
else
{
    trace("NO");
}

hasEventListenerこの関数には、イベントという1つのパラメーターしかないことに気付くでしょう。ただし、1つのイベントに複数のリスナー関数がない可能性があるため、ほとんどの場合、これは問題ありません。

于 2012-07-31T10:26:41.030 に答える
4

あなたのコードは間違っています。AS3 言語リファレンスによると、addEventListener()void を返します。hasEventListener()リスナーがインスタンスにアタッチされているかどうかを確認する場合は、使用する必要があります。

if (rightBtn.hasEventListener(MouseEvent.CLICK)) {
    rightBtn.removeEventListener(MouseEvent.CLICK, goRight4);
    trace("YES");
} else {
    trace("NO");
}

ただし、イベント リスナーを削除する最善の方法は、インスタンスにアタッチされているかどうかを知らずに削除することです。

// Will not throw any error even if no listener was attached.
rightBtn.removeEventListener(MouseEvent.CLICK, goRight4);
于 2012-07-31T10:23:58.333 に答える