代码之家  ›  专栏  ›  技术社区  ›  Paul Chernoch

当用户单击TextField中的超链接时,如何阻止Flash更改缩进?

  •  1
  • Paul Chernoch  · 技术社区  · 15 年前

    我有一个TextField,我通过设置htmlText来初始化它。 当用户单击超链接时,段落中第二行和后续行的缩进会发生变化。为什么?我该怎么阻止它?

    我的html在行首有一个图像,后面是标签,后面是更多的文本。要设置超链接的样式,使其在鼠标悬停时始终为蓝色并加下划线,请执行以下操作:

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

    <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/>
    

    事实证明,文本字段的宽度使其换行,第二行以“Retrieved 11/24/08”开头。单击超链接会使这一行缩进。后续段落不受影响。

    想法:我正在考虑将所有超链接更改为使用“event:”作为URL协议,这会导致TextEvent.LINK文件要触发的事件,而不是跟随链接。然后我必须在第二次通话中打开浏览器。我可以使用这个事件处理程序来设置html文本本身,这 解决问题。(当我在应用程序中切换页面,然后返回页面时,一切又正常了。)

    问题:如果我使用“event:”协议,并且用户尝试鼠标右键单击,他们将得到一个错误,或者我被告知。(见 http://www.blog.lessrain.com/as3-texteventlink-and-contextmenu-incompatibilities/ )我不喜欢这种权衡。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Paul Chernoch    15 年前

    我找到了一个解决办法,按照我上面的想法。

    2) 在控件上添加事件侦听器以处理请求。 3) 侦听器启动浏览器并将文本设置为空字符串,然后设置其原始值。

    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) 添加事件侦听器

    stepText.addEventListener(TextEvent.LINK, hyperlinkHandler);
    

    3) 处理链接事件。

    private function hyperlinkHandler(e:TextEvent) {
        var temp:String = stepText.htmlText;
        stepText.htmlText = "";
        stepText.htmlText = temp;
        var url:String = e.text;
        trace("Clicked on link to URL: " + url);
        navigateToURL(new URLRequest(url), "_blank");   
    }
    

    如果我不先将字段设置为空字符串,它不会认为有任何更改,所以它什么也不做。