我想做的是;单击文本字段时,将运行一个函数,该函数使用文本字段中的文本作为URLRequest的URL并将您发送到另一个页面。它工作得很好,但我希望光标在悬停在文本字段上时切换到一只手。
我能够通过将它们作为Children添加到具有buttonMode和useHandCursor的MovieClip来实现这一点,但是我必须将MovieClip.mouseChildren设置为false才能使其工作。这就是问题所在; mouseChildren禁止我去页面...
我无法让MovieClip父级使用该函数转到URL,因为有多个文本字段,而不仅仅是一个,我不能使用e.target.text从文本字段中获取URL,因为从父MovieClip获取text属性而不是......
这是我的代码:
var handyMan:MovieClip = new MovieClip;
handyMan.useHandCursor = true;
handyMan.buttonMode = true;
handyMan.mouseChildren = false;
for each (var xit:TextField in linkus)
{
xit.addEventListener(MouseEvent.CLICK, useLink);
handyMan.addChild(xit);
}
this.addChild(handyMan);
function useLink(e:MouseEvent):void
{
navigateToURL(new URLRequest(e.target.text));
}
那么,有没有办法让mouseChildren 和同时使用手形光标?
答案 0 :(得分:1)
您是否尝试过无法选择文字字段?
xit.selectable = false;
这可能允许您不需要使用mouseChildren。
或者,如果您从文本字段收到事件,请使用类似FunctionObject:
的内容package {
/**
* ...
* @author Pimgd
*/
public class FunctionObject
{
private var f:Function;
private var o:Object;
private var args:Array;
public function FunctionObject(func:Function, obj:Object, fArgs:Array) {
f = func;
o = obj;
args = fArgs;
if (args == null) {
args = new Array();
}
}
public function call(...rest):* {
var a = args.concat();
for each(var x in rest) {
a.push(x);
}
var obj:Object = f.apply(o, a);
if (obj != null) {
return obj;
}
}
public function apply(target:Object, ...rest):* {
return f.apply(target, rest);
}
public function setArgs(nArgs:Array):void {
args = nArgs.concat();
}
public function getArgs():Array {
return args;
}
public function getFunction():Function {
return f;
}
}
}
将forloop改为
for each (var xit:TextField in linkus)
{
var f:FunctionObject = new FunctionObject(useLink, this, [xit]);
xit.addEventListener(MouseEvent.CLICK, f.call);
handyMan.addChild(xit);
}
然后,改变useLink以获取文本字段......
function useLink(tf:TextField):void
{
navigateToURL(new URLRequest(tf.text));
}
这应该可以解决你的问题。是的,这不好。但它确实有效。
它做的是准备一个函数调用 - useLink,将text作为参数。它将该函数的触发器附加到eventListener,以便在触发时触发准备好的函数调用。