Flex 3: удержание фокуса на текстовом поле при нажатии кнопки - PullRequest
1 голос
/ 31 мая 2011

Быстрый фон. У меня есть серия редактируемых текстовых областей, в которые я хочу добавить переменную одним нажатием кнопки.

Если я нажму кнопку, текстовое поле теряет фокус, и я не могу указать, в какое текстовое поле мне нужно добавить переменную. Может кто-нибудь придумать способ удержать фокус на текстовом поле, вставить переменную и затем позволить пользователю продолжать печатать.

Я не уверен, если это частично или полностью возможно, но любая помощь будет высоко ценится. Я играл с функцией setFocus, пытаясь заставить это работать безуспешно.

Вот фрагмент моего кода:

public function addFirstName(myText:string):void{
    myText = myText + "<<firstname>>";
}

<mx:TextArea id="txt1" change="text1=txt1.text" text="{text3}" editable="true"/>
<mx:TextArea id="txt2" change="text2=txt2.text" text="{text2}" editable="true"/>
<mx:Button label="Insert First Name" click="addFirstName(focusedtextarea)"/>

это сфокусированная текстовая часть, на которой я застрял

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Напишите некоторый код, используя событие focus out , чтобы сохранить текстовую область, которую необходимо изменить. Концептуально примерно так:

var textAreaToBeChanged : TextArea;

protected function onTextAreaLoseFocus(event:FocusEvent):void{
 // I'm pretty sure Target is the right property to use here; but didn't test
 textAreaToBeChanged = target;
}

Позже в вашем MXML добавьте прослушиватель событий .:

<mx:TextArea id="txt1" change="text1=txt1.text" text="{text3}" editable="true" focusOut="{onTextAreaLoseFocus(event)}"/>
<mx:TextArea id="txt2" change="text2=txt2.text" text="{text2}" editable="true" focusOut="{onTextAreaLoseFocus(event)}"/>
0 голосов
/ 31 мая 2011

Сортировка!

public var textAreaToBeChanged : Object;
public var textposition:int

        //when leaving focus on a textbox, record the textarea and text position. If a button is clicked to add a variable, it needs to be added at this position
        protected function onTextAreaLoseFocus(event:FocusEvent):void{
            textAreaToBeChanged = event.target;
            textposition = textAreaToBeChanged.caretIndex;  
        }

        //split the text from the recent textbox at the position the cursor has just been. The restructure the text with the firstname variable in the middle.
        public function addFirstName():void{
            var firstbit:String = textAreaToBeChanged.text.substr(0,textposition);
            var myString:String = firstbit;

            myString = myString + firstnameVar;

            var lastbit:String = textAreaToBeChanged.text.substr(textposition);
            myString = myString + lastbit;
            textAreaToBeChanged.text = myString;
            //set the focus back to the textarea.
            textAreaToBeChanged.setFocus();
            //place the cursor after the variable we just added.
            textAreaToBeChanged.setSelection(textposition + firstnameVar.length, textposition + firstnameVar.length);
        }

и MXML:

<mx:TextArea id="txt1" change="text1=txt1.text" text="{text3}" editable="true" focusOut="{onTextAreaLoseFocus(event)}"/>
<mx:TextArea id="txt2" change="text2=txt2.text" text="{text2}" editable="true" focusOut="{onTextAreaLoseFocus(event)}"/>
<mx:Button label="Insert First Name" click="addFirstName()"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...