2009-06-23 5 views
1

J'ai un TextField que j'initialise en définissant htmlText. Le texte comporte des balises d'ancrage (liens hypertexte). Lorsqu'un utilisateur clique sur le lien hypertexte, l'indentation de la deuxième ligne et des lignes suivantes dans le paragraphe change. Pourquoi? Comment l'arrêter?Comment puis-je empêcher Flash de modifier le retrait lorsque l'utilisateur clique sur un lien hypertexte dans TextField?

Mon code HTML a une image au début de la ligne, suivie de l'étiquette, suivie de plus de texte. Pour le style des liens hyper regarder toujours bleu et souligné lorsque la souris est sur eux, je fais ceci:

var css:StyleSheet = new StyleSheet(); 
css.parseCSS("a {color: #0000FF;} a:hover {text-decoration: underline;}"); 
stepText.styleSheet = css; 
stepText.htmlText = textToUse; 
stepText.visible = true; 

Voici un fragment du texte HTML (avec des sauts de ligne et les espaces exrta ajoutés pour améliorer la lisibilité - à l'origine, il était une longue ligne):

<textformat indent="-37" blockindent="37" > 
    <img src="media/interface/level-1-bullets/solid-circle.png" 
     align="left" 
     hspace="8" 
     vspace="1"/> 
    American Dental Association. (n.d.). <i>Cleaning your teeth and gums (oral hygiene)</i>. 
    Retrieved 11/24/08, from 
     <a href="http://www.ada.org/public/topics/cleaning_faq.asp" 
      target="_blank">http://www.ada.org/public/topics/cleaning_faq.asp 
     </a> 
</textformat> 
<br/> 

Comme il se trouve, le champ de texte est d'une largeur telle qu'elle enveloppe et la deuxième ligne commence par « Extrait 24.11.08 ». En cliquant sur le lien hypertexte, cette ligne particulière est indentée. Les paragraphes suivants ne sont pas affectés. L'image est une balle de liste d'environ 37 pixels de large. (J'ai utilisé des images à la place des étiquettes li parce que Flash n'autorise pas les listes imbriquées, donc je l'ai simulé en utilisant une série d'images avec des espaces variables pour simuler trois niveaux d'indentation.)

IDEA: Je pensais changer tout des liens hypertexte pour utiliser "event:" comme protocole d'URL, ce qui provoque le déclenchement d'un événement TextEvent.LINK au lieu de suivre le lien. Ensuite, je devrais ouvrir le navigateur dans un deuxième appel. Je pourrais utiliser ce gestionnaire d'événement pour définir le texte html à lui-même, ce qui pourrait résoudre le problème. (Lorsque je change de page dans mon application et que je reviens à la page, tout redevient correct.)

PROBLÈME: Si j'utilise le protocole "event:" et que l'utilisateur essaie le clic droit de la souris, il obtiendra une erreur, ou alors on me dit. (Voir http://www.blog.lessrain.com/as3-texteventlink-and-contextmenu-incompatibilities/) Je n'aime pas ce compromis.

Répondre

1

J'ai trouvé une solution de contournement, à l'instar de mon IDEA ci-dessus.

1) Préfixer tous les hyper-liens avec "événement:". 2) Ajouter un écouteur d'événement sur le contrôle pour traiter la demande. 3) L'écouteur lance le navigateur ET définit le texte sur une chaîne vide puis sa valeur d'origine.

1) Préfixer avec un événement :.

public static function hrefEvents(s:String):String { 
    var hrefRegex:RegExp = /href="/gm; 
    var output:String = s.replace(hrefRegex, "href=\"event:"); 
    var dupe:RegExp = /event:event:/gm; 
    output = output.replace(dupe, "event:"); 
    return output; 
} 

2) Ajouter un événement auditeur

stepText.addEventListener(TextEvent.LINK, hyperlinkHandler); 

3) Gérer l'événement LINK. Si je ne définis pas le champ pour la chaîne vide d'abord, il ne pense pas que quelque chose a changé, donc il ne fait rien.

Questions connexes