Событие действие при нажатии гиперссылки из текстового поля - PullRequest
0 голосов
/ 18 февраля 2011

Повторю мой вопрос, чтобы быть проще ....

Я хочу иметь возможность связать событие Action Script с щелчком по тексту в текстовом поле. Единственное, что я могу видеть, - это просто создать базовую гиперссылку, но не применять никаких действий:

enter image description here

Я возился более часа, но просто не вижу способа применить actioncript, и все учебники в Интернете, похоже, нацелены на ActionScript 3 или не выполняют именно то, что я хочу.

Причина этого в том, что на сайте есть фоновая музыка, и при запуске YouTube ее нужно отключить. Я знаю код для отключения звука и уже делал это для пользовательских объектов, но не вижу способа применить скрипт к гиперссылке в текстовом поле.

Хотя в идеале я хотел бы сделать это таким образом, я с радостью рассмотрю любое решение, которое приведет к открытию страницы и отключению сайта.

Если честно, я попытался быстро переключиться на AS3, но, поскольку существует так много проблем, которые нужно было бы решить, я бы скорее потратил время на преобразование сайта в HTML / Jquery или даже в Silverlight .... Я просто надеюсь, что я упустил что-то маленькое, что может сделать это без особых изменений.

Ответы [ 2 ]

1 голос
/ 05 ноября 2011

Вы также можете использовать Класс TextArea (НЕ TEXTAREA КОМПОНЕНТ! Это совершенно новый класс ООП, созданный doitflash) вместо использования TextField класса каждый, где вам нужно работать с текстом в вашем проекте!

проверить www.doitflash.com

Сайт создал класс с именем «TextArea», который является расширением исходного класса «TextField» и заканчивается недостатками TextField.

TextArea позволяет вам вызывать ваши собственные пользовательские функции прямо из гиперссылки внутри вашего текстового блока, а не просто вызывать внешние ссылки или вводить себя в заблуждение, добавляя прослушиватель, когда вы нажимаете гиперссылку, и т. Д ... потому что, если, если вы хотите, чтобы даже передать аргументы через вашу функцию из вашего текстового блока, это сложно, но TextArea также отвечает на это:)

Вот пример кода для вызова функции по гиперссылке внутри вашего текстового блока:

import flash.text.TextFieldAutoSize;
import com.doitflash.text.TextArea;



// set TextArea
var _textArea:TextArea = new TextArea();
_textArea.condenseWhite = true;
_textArea.autoSize = TextFieldAutoSize.LEFT;
_textArea.embedFonts = false;
_textArea.border = true;
_textArea.multiline = true;
_textArea.wordWrap = true;
_textArea.width = 200;

_textArea.holder = this;
_textArea.client = this; // must be where you have your 'allowed functions' saved
_textArea.funcSecurity = true;
_textArea.allowedFunctions(stringLink, objectLink, arrayLink, arrayObjectStringLink);
_textArea.mouseRollOverEnabled = true;
_textArea.fmlText = "<p>Pass String as arguments in this <a href='event:stringLink(simple string)'>link</a>.</p>";



/*
my custom functions that I call from _textArea.fmlText by using <a /> tags, like we used to insert hyperlinks inside our text blocks.
for example, to call stringLink() from _textArea.fmlText, you can write: 
_textArea.fmlText = "my hyperlink: <a href='event:stringLink(this is my passed value)'>link</a>.";

NOTE: your custom functions arguments can be as many as you like (supported argument types: Object, Array, String)
*/
function stringLink($value:String):void
{
    trace("custom function");
}

Он имеет множество дополнительных функций и конкретно не ограничивается этой проблемой. Проверьте doitflash для получения дополнительной информации. сайт предоставляет платформу и ее скачивание также бесплатно:)

1 голос
/ 18 февраля 2011

Вы можете использовать событие TextEvent.LINK для прослушивания кликов пользователей по ссылке в текстовом поле:

import flash.text.TextField;
import flash.events.TextEvent;

var textField:TextField = new TextField();
textField.htmlText = "<a href='event:arg1,arg2'><b>hyperlink</b></a>";
addChild(textField);

textField.addEventListener(TextEvent.LINK, onTextFieldLink);

function onTextFieldLink(e:TextEvent):void
{
    var args:Array = e.text.split(",");
    trace(args); // output: arg1, arg2

}// end function

Любые части, которые идут после "event:", сохраняются в текстовом свойстве объекта события. Вы можете имитировать синтаксический анализ аргументов объекта события, используя метод String.split (), чтобы разделить текстовую строку разделителем, таким как запятая. Затем вы можете хранить каждый отдельный элемент в массиве.

[UPDATE]

Для вашего конкретного сценария (насколько я понимаю) для вас лучше подойдет следующее:

import flash.text.TextField;
import flash.events.TextEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;

var textField:TextField = new TextField();
textField.htmlText = "<a href='event:watch?v=JZweDwbJ_Ic'><b>hyperlink</b></a>";
addChild(textField);

textField.addEventListener(TextEvent.LINK, onTextFieldLink);

function onTextFieldLink(e:TextEvent):void
{
    var url:String = "http://www.youtube.com/" + e.text;
    var urlRequest:URLRequest = new URLRequest(url);
    navigateToURL(urlRequest, "_blank");

}// end function
...