我正在尝试在Flex中创建一个简单的“智能”文本框组件,我想在其中使用一个函数,我可以在组件外部使用它来强制自己选择其中的所有文本。
在SmartTextbox.mxml
内:
public function selectAll():void
{
this.setSelection(0, this.length);
}
当文本框获得焦点时,我也会使用此功能,如下所示:
private function onTextInput_focusIn(event:Event):void
{
selectAll();
}
后一个,在focusIn事件中,正在工作。 但是,如果我尝试从外部调用该函数,例如:
在texInputQuickSearch
是SmartTextBox组件的另一个组件内。
if(searchModule.currentState == SearchModule.STATE_SEARCH)
{
doSearch();
searchModule.textInputQuickSearch.selectAll();
}
不会重新选择文字。
为什么它会像这样工作?
答案 0 :(得分:1)
你需要做类似的事情......
AS3:
import mx.core.UITextField;
private function initializeHandler( event:Event ):void{
var ti:TextInput = event.currentTarget as TextInput;
var tf:UITextField = ti.mx_internal::getTextField();
tf.alwaysShowSelection = true;
ti.setFocus();
}
private function setSelection( start:int, end:int ):void{
txtName.selectionBeginIndex = start;
txtName.selectionEndIndex = end;
}
MXML:
<mx:TextInput id="txtName"
initialize="initializeHandler( event );"/>
答案 1 :(得分:0)
我的第一个猜测是你的条件语句在你期望的时候没有评估为TRUE。也许这是你问题中的错字,但你有:
带有小写“s”的searchModule与带有大写“S”的SearchModule相比如果您没有使用Flex Builder或其他调试环境,我会使用跟踪或类似内容的真实代码块测试它(可以在FLASH IDE中运行):
if(searchModule.currentState == SearchModule.STATE_SEARCH) {
trace("made it here...I'm in");
doSearch();
searchModule.textInputQuickSearch.selectAll();
trace("you should have seen it select!");
}
验证两个输出都打印。如果是这样,你至少知道doSearch()不会卡住。