我有一个数字步进器,我想在其文本框中添加一个事件监听器:
use namespace mx_internal;
durationStepper.inputField.addEventListener(Event.CHANGE,durationStepperTextInputChanged);
private function durationStepperTextInputChanged(event:Event):void
{
use namespace mx_internal;
trace(durationStepper.inputField.text);
}
但是,事件功能不会执行!我在那里放了一个断点但它没有达到它!我在这里错过了什么?感谢。
答案 0 :(得分:3)
问题是开发人员已停止冒泡冒险事件。如果您转到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();
在这种情况下,您有两个选择:要么您应该找到另一种实现逻辑的方法,要么您可以复制组件的源代码并消除此代码行。
覆盖函数会很好,但它是私有的。
您可以阅读此常见问题here
我试图选择第二种方式。它完美无缺!它不仅是* .as文件,还包括其中的一些文件。
您可以下载组件here。