ON CHANGE block

Syntax

ON CHANGE field-spec [,...]
   instruction [...]

Usage

The ON CHANGE block can be used to detect when a field has been changed by user input. The ON CHANGE block is executed, if the value has changed since the field got the focus and the modification flag is set.

The ON CHANGE block can be used in INPUT, INPUT ARRAY and CONSTRUCT dialogs.

For editable fields defined as EDIT, TEXTEDIT or BUTTONEDIT, the ON CHANGE block is executed when leaving a field, if the value of the specified field has changed since the field got the focus and the modification flag is set for the field. The field is left when user validates the dialog, when moving to another field, or when moving to another row in an INPUT ARRAY. However, if the text edit field is defined with the COMPLETER attribute to enable autocompletion, the ON CHANGE trigger will be fired after a short period of time, when the user has typed characters in.

For editable fields defined as CHECKBOX, COMBOBOX, DATEEDIT, DATETIMEEDIT, TIMEEDIT, RADIOGROUP, SPINEDIT, SLIDER or URL-based WEBCOMPONENT (when the COMPONENTTYPE attribute is not used), the ON CHANGE block is invoked immediately when the user changes the value with the widget edition feature. For example, when toggling the state of a CHECKBOX, when selecting an item in a COMBOBOX list, or when choosing a date in the calendar of a DATEEDIT. Note that for such item types, when ON CHANGE is fired, the modification flag is always set.

   ON CHANGE order_checked -- Defined as CHECKBOX
      CALL setup_dialog(DIALOG)

If both an ON CHANGE block and AFTER FIELD block are defined for a field, the ON CHANGE block is executed before the AFTER FIELD block.

When changing by program the value of the current field in an ON ACTION block, the ON CHANGE block will be executed when leaving the field, if the value is different from the previous value and the modification flag is set (after previous user input or when the touched flag has been changed by program).

In an INPUT or INPUT ARRAY, the field value change is related to the value of the variable bound to the field. In a CONSTRUCT dialog, the field value change is related to the input buffer / displayed value.

With a NEXT FIELD instruction, the state of the field value change is reset, as if the user had left and reentered the field. When using NEXT FIELD in ON CHANGE block or in an ON ACTION block, the ON CHANGE block will only be re-executed, if the value is changed since NEXT FIELD, and the modification flag is set. Therefore, ON CHANGE should not be used for field validation with a NEXT FIELD, because ON CHANGE will not get triggered again, if the (invalid) value has not changed; Field validation rules must be implemented in AFTER FIELD blocks and/or AFTER INPUT blocks.