setUpdateEvents(targetNode, ...events) {
		const datatype = this.options.datatype;
		const optional = this.options.hasOwnProperty('optional') ? this.options.optional : true;
		const validate = this.options.validate;

		this.registerEvents(targetNode, 'widget-update', events);

		if (!datatype && !validate)
			return;

		this.vfunc = UI.prototype.addValidator(...[
			targetNode, datatype ?? 'string',
			optional, validate
		].concat(events));

		this.node.addEventListener('validation-success', L.bind((ev) => {
			this.validState = true;
			this.validationError = '';
		}, this));

		this.node.addEventListener('validation-failure', L.bind((ev) => {
			this.validState = false;
			this.validationError = ev.detail.message;
		}, this));
	}
Set up listeners for native DOM events that may update the widget value.

Sets up event handlers on the given target DOM node for the given event
names which may cause the input value to update, such as `keyup` or
`onclick` events. In contrast to change events, such update events will
trigger input value validation.

@instance
@memberof LuCI.ui.AbstractElement
@param {Node} targetNode
Specifies the DOM node on which the event listeners should be registered.

@param {...string} events
The DOM events for which event handlers should be registered.