Подписка на события виджета

В ZForms определено несколько специальных событий, генерируемых виджетами при наступлении соответствующих условий. Для этих событий могут быть определены функции обратного вызова («подписчики»), которые будут вызваны в момент наступления события.

Синтаксис добавления «подписчика» (JavaScript)

ZForms.attachObserver(
	String sEventType,
	Function fCallBack,
	ZForms.Widget oObservable = ZForms
	);

Где:

  • sEventType — тип события.
  • fCallBack — функция обратного вызова.
  • oObservable — виджет, на котором будут «слушаться» события.

При вызове функции обратного вызова ей будут переданы два обязательных параметра: sEventType (тип произошедшего события) и oWidget (виджет, в котором событие произошло), то есть функция обратного вызова должна быть объявлена следующим образом:

Объявление функции обратного вызова (JavaScript)

var fCallBack = function(
	sEventType,
	oWidget
	) {

	// действия функции

};

У некоторых событий (например, «Изменение состояния формы») есть третий, дополнительный параметр, который может быть объявлен и использован в функции обратного вызвана.

Далее описаны все типы событий, определенных в ZForms.

Инициализация

Тип события: ZForms.EVENT_TYPE_ON_INIT

Данное событие генерируется после создания объектов всех форм на странице. Используется как точка входа для установки всех остальных обработчиков событий.

Поддерживающий объект — ZForms.

Изменение значения

Тип события: ZForms.EVENT_TYPE_ON_CHANGE

Данное событие генерируется в момент изменения значения виджета, причем неважно что именно привело к изменению — действие пользователя или установка значения извне.

Поддерживающие виджеты:

Пример. Текущее значение виджета «Имя» копируется в виджет «Копия».

Код примера

<form class="zf" id="form-1" action=".">
	<dl>
		<dt><label for="input-last-name-1">Имя</label></dt>
		<dd><input class="zf" type="text" id="input-last-name-1" /></dd>
	</dl>
	<dl>
		<dt><label for="input-last-name-copy-1">Копия</label></dt>
		<dd><input class="zf" type="text" id="input-last-name-copy-1" /></dd>
	</dl>
</form>
<script type="text/javascript">
//<![CDATA[
ZForms.attachObserver(
	ZForms.EVENT_TYPE_ON_INIT,
	function() {

		var
			oForm = ZForms.getFormById('form-1'),
			oNameWidget = oForm.getWidgetById('input-last-name-1'),
			oCopyWidget = oForm.getWidgetById('input-last-name-copy-1')
			;

		ZForms.attachObserver(
			ZForms.EVENT_TYPE_ON_CHANGE,
			function(sEventType, oWidget) {

				oCopyWidget.setValue(oCopyWidget.createValue(oWidget.getValue().get()));

			},
			oNameWidget
			);

	}
	);
//]]>
</script>

Отправка формы

Тип события: ZForms.EVENT_TYPE_ON_BEFORE_SUBMIT

Данное событие генерируется непосредственно перед отправкой формы, после того как выполнены все условия валидаций, проверок и т.д.

Поддерживающие виджеты:

Изменение состояния формы

Тип события: ZForms.EVENT_TYPE_ON_READY_CHANGE

Данное событие генерируется в момент изменения состояния готовности формы к отправке (заполненность необходимых виджетов и валидность их данных).

Поддерживающие виджеты:

Дополнительный параметр функции обратного вызова: bReady, указывает на то, готова или нет форма к отправке.