0

我有一个数字步进器,我想在其文本框中添加一个事件侦听器:

use namespace mx_internal;
durationStepper.inputField.addEventListener(Event.CHANGE,durationStepperTextInputChanged);

private function durationStepperTextInputChanged(event:Event):void
{ 
    use namespace mx_internal;
    trace(durationStepper.inputField.text);
}

但是,事件函数不执行!我在那里设置了一个断点,但它没有达到它!我在这里想念什么?谢谢。

4

1 回答 1

3

问题是开发人员已阻止 Change 事件冒泡。如果你去 NumericStepper 的源文件,你可以找到它。这里有两个函数,它们会阻止您获取事件。

override protected function createChildren():void
{
    super.createChildren();

    if (!inputField)
    {
        inputField = new TextInput();

        //some code

        //some code

        inputField.addEventListener(Event.CHANGE, inputField_changeHandler);

        addChild(inputField);
    }
}

private function inputField_changeHandler(event:Event):void
{
    // Stop the event from bubbling up.
    event.stopImmediatePropagation();

    var inputValue:Number = Number(inputField.text);
    if ((inputValue != value &&
        (Math.abs(inputValue - value) >= 0.000001 || isNaN(inputValue))) || 
        inputField.text == "")
    {
        _value = checkValidValue(inputValue);
    }
}

如您所见,第二个函数有 event.stopImmediatePropagation();

在这种情况下,您有两个选择:您应该找到另一种实现逻辑的方法,或者您可以复制组件的源代码并删除此代码行。

覆盖该函数会很好,但它是私有的。

您可以在此处阅读有关此常见问题的信息

我试图选择第二种方式。它完美地工作!它不仅是 *.as 文件,还有其他一些文件在其中使用。

您可以在此处下载该组件。

于 2013-01-29T17:03:43.867 回答