Итак, задача следующая: в поле ввода есть некий текст по умолчанию; если пользователь начал вводить собственный текст, то текст по умолчанию исчезает; если пользователь передумал вводить свой текст, то текст по умолчанию восстанавливается.
Для собственного удобства текстовые поля я буду создавать кодом, но показанный приём можно использовать и для полей ввода, созданных вручную в флеш-редакторе.
Начнём с ActionScript 3.0...
Код ActionScript 3.0:
/*
импорт классов
*/
import flash.text.*;
import flash.events.FocusEvent;
/*
переменная, которая хранит текст по умолчанию
*/
var defaultText:String = "Поле ввода текста";
/*
форматирование текстового поля ввода
*/
var textFormat:TextFormat = new TextFormat();
textFormat.color = 0x999999;
textFormat.font = "_serif";
textFormat.size = 16;
textFormat.leftMargin = 5;
textFormat.rightMargin = 5;
textFormat.align = TextFormatAlign.LEFT;
/*
текстовое поле ввода
*/
var textInput = new TextField();
textInput.type = TextFieldType.INPUT;
textInput.defaultTextFormat = textFormat;
textInput.width = 400;
textInput.height = 24;
textInput.border = true;
this.addChild(textInput);
textInput.x = 50;
textInput.y = 50;
textInput.text = defaultText;
/*
функции, отслеживающие события фокуса
*/
textInput.addEventListener(FocusEvent.FOCUS_IN,focusInTextInput);
function focusInTextInput(event:FocusEvent):void
{
if (textInput.text == defaultText)
{
textInput.text = "";
}
}
textInput.addEventListener(FocusEvent.FOCUS_OUT,focusOutTextInput);
function focusOutTextInput(event:FocusEvent):void
{
if (textInput.text.length < 1)
{
textInput.text = defaultText;
}
}
Результат:
Знаю, вы скажите, что код работает некорректно, когда пользователь вбивает в поле ввода пробелы. Но эту проблему можно легко решить, удалив пробелы в начале и конце вводимого текста (можно, например, воспользоваться функцией Trim() из поста Полезные функции при работе со String в ActionScript 3.0).
Примерно (!) тоже самое, но на ActionScript 2.0 будет выглядеть следующим образом...
Код ActionScript 2.0:
/*
переменная, которая хранит текст по умолчанию
*/
var defaultText:String = "Поле ввода текста";
/*
форматирование текстового поля ввода
*/
var textFormat:TextFormat = new TextFormat();
textFormat.color = 0x999999;
textFormat.font = "_serif";
textFormat.size = 16;
textFormat.leftMargin = 5;
textFormat.rightMargin = 5;
textFormat.align = "left";
/*
текстовое поле ввода
*/
var textInput:TextField = this.createTextField("textInput",this.getNextHighestDepth(),50,50,400,24);
textInput.type = "input";
textInput.border = true;
textInput.setNewTextFormat(textFormat);
textInput.text = defaultText;
/*
функции, отслеживающие события фокуса
*/
textInput.onSetFocus = function(oldFocus:Object)
{
if (textInput.text == defaultText)
{
textInput.text = "";
}
}
textInput.onKillFocus = function()
{
if (textInput.text.length < 1)
{
textInput.text = defaultText;
}
}
Результат:
Как видите, в случае с AS 2.0 есть своя специфика. Но не думаю, что это критично :-)