user940016
user940016

Reputation: 2948

How to add event listeners to the numeric stepper's text box?

I have a numeric stepper and I want to add an event listener to its text box:

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

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

However, the event function does not execute! I put a break point there and it does not reach it! What am I missing here? Thanks.

Upvotes: 0

Views: 447

Answers (1)

Anton
Anton

Reputation: 4684

The problem is that the developer has stopped Change event from bubbling up. You can find it if you go to the source file of the NumericStepper. Here are two functions, which prevent you from getting the event.

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);
    }
}

As you can see the second function has event.stopImmediatePropagation();

In this case you have two options: either you should find another way of implementing your logic, or you can copy the source code of the component and eliminate this code line.

It would be fine to override the function, but it is private.

You can read about this common problem here

I have tried to choose the second way. It works perfectly! It is not only the *.as file, but some others, which are used in it.

You can download the component here.

Upvotes: 3

Related Questions