【问题标题】:AS3: TextField FocusAS3:文本字段焦点
【发布时间】:2010-11-09 16:50:30
【问题描述】:

我正在尝试处理 TextField 上的焦点事件,以便在聚焦(选项卡或单击)时选择所有文本。好像我在这里做错了什么?

txtTextField.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn);
function handleFocusIn() {
 //select all text here
}

【问题讨论】:

    标签: actionscript-3 focus textfield


    【解决方案1】:

    您的handleFocusIn 应该有签名

    function handleFocusIn(event:FocusEvent) // or just Event
    

    【讨论】:

      【解决方案2】:

      我在开发的原型阶段(在 Flash 中)遇到了类似的问题。 文本字段根本没有触发 FocusEvent.FOCUS_OUT 事件。 问题是我在舞台上有一个 Button 组件。 一旦我用一个从头开始创建的自定义按钮替换了那个 flash Button 组件实例,我就让它工作了。 我无法通过 Internet 找到此错误和解决方案。

      使用舞台上的 Button 组件,我只有在第一次单击它时才会收到 FOCUS_IN 事件。 之后,我既不会触发 FOCUS_OUT 也不会触发 FOCUS_IN 事件。

      我希望这会对某人有所帮助。

      【讨论】:

        【解决方案3】:

        我需要同样的东西,当它获得焦点时选择文本字段的内容。

        我试过了:

        A) 只需在 FocusEvent 之后进行选择。这似乎不起作用(我的猜测是在处理鼠标单击之前会触发 FocusEvents,这反过来会撤消选择)。

        B) 在每次鼠标点击时选择。这行得通,但是对于以后只想选择文本的一部分的用户来说,这很烦人,因为这种尝试总是会导致 -all- 内容被选中。

        以下解决方法似乎有效:

            myTextField.addEventListener(MouseEvent.CLICK, selectAllOnce);
        
            function selectAllOnce(e:MouseEvent) {
                e.target.removeEventListener(MouseEvent.CLICK, selectAllOnce);
                e.target.addEventListener(FocusEvent.FOCUS_OUT, addSelectListener);
                selectAll(e);
            }
        
            function addSelectListener(e:FocusEvent) {
                e.target.addEventListener(MouseEvent.CLICK, selectAllOnce);
                e.target.removeEventListener(FocusEvent.FOCUS_OUT, addSelectListener);
            }
        
            function selectAll(e:Event) {
                e.target.setSelection(0, e.target.getLineLength(0));
            }
        

        希望对您有所帮助。我个人认为,如果 adobe 只是为 TextField 对象添加了一个选项,那将是最合乎逻辑的。

        【讨论】:

          【解决方案4】:

          我正在这样处理我的处理程序。像魅力一样工作:

          private function onFocusIn(e:FocusEvent):void 
          {
              setTimeout(title.setSelection, 100, 0, e.target.text.length);           
          }
          

          【讨论】:

            【解决方案5】:

            你会发现用户没有像这样只选择部分文本:

            private function clickHandler(e:MouseEvent){
                if(tfield.selectionBeginIndex == tfield.selectionEndIndex){
                    tfield.setSelection(0, tfield.length);
                }
            }
            

            【讨论】:

              【解决方案6】:

              简单的解决方案是:

              import flash.events.Event;
              import flash.events.MouseEvent;
              import flash.events.FocusEvent;
              
              tf.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn);
              
              function handleFocusIn(e:FocusEvent):void
              {
                  tf.addEventListener(MouseEvent.MOUSE_UP, preventLosingSelection);
                  tf.setSelection(0, tf.length);
                  stage.focus = tf;
              }
              
              function preventLosingSelection(e:MouseEvent):void
              {
                  tf.removeEventListener(MouseEvent.MOUSE_UP, preventLosingSelection);
                  tf.setSelection(0, tf.length);
                  stage.focus = tf;
              }
              

              希望这对将来的人有所帮助!

              【讨论】:

                【解决方案7】:

                您只是忘记了捕获事件的 var。 它应该在函数定义中的括号之间。 最简单的方法就是直接称它为“e”而没有进一步的定义,就像我在这里所做的那样。 它有效:

                txtTextField.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn);
                function handleFocusIn(e) {
                 //select all text here
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2013-05-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多