luci-base: form.js: add AbstractValue.onchange property
Introduce a new, widget agnostic onchange property which allows setting custom handler functions to react on element value changes. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
572090101d
commit
2d774c4973
1 changed files with 32 additions and 0 deletions
|
@ -1374,6 +1374,21 @@ var CBIAbstractValue = CBIAbstractElement.extend(/** @lends LuCI.form.AbstractVa
|
|||
* @default null
|
||||
*/
|
||||
|
||||
/**
|
||||
* Register a custom value change handler.
|
||||
*
|
||||
* If this property is set to a function value, the function is invoked
|
||||
* whenever the value of the underlying UI input element is changing.
|
||||
*
|
||||
* The invoked handler function will receive the DOM click element as
|
||||
* first and the underlying configuration section ID as well as the input
|
||||
* value as second and third argument respectively.
|
||||
*
|
||||
* @name LuCI.form.AbstractValue.prototype#onchange
|
||||
* @type function
|
||||
* @default null
|
||||
*/
|
||||
|
||||
/**
|
||||
* Add a dependency contraint to the option.
|
||||
*
|
||||
|
@ -3120,6 +3135,20 @@ var CBIValue = CBIAbstractValue.extend(/** @lends LuCI.form.Value.prototype */ {
|
|||
.then(this.renderFrame.bind(this, section_id, in_table, option_index));
|
||||
},
|
||||
|
||||
/** @private */
|
||||
handleValueChange: function(section_id, state, ev) {
|
||||
if (typeof(this.onchange) != 'function')
|
||||
return;
|
||||
|
||||
var value = this.formvalue(section_id);
|
||||
|
||||
if (isEqual(value, state.previousValue))
|
||||
return;
|
||||
|
||||
state.previousValue = value;
|
||||
this.onchange.call(this, ev, section_id, value);
|
||||
},
|
||||
|
||||
/** @private */
|
||||
renderFrame: function(section_id, in_table, option_index, nodes) {
|
||||
var config_name = this.uciconfig || this.section.uciconfig || this.map.config,
|
||||
|
@ -3189,6 +3218,9 @@ var CBIValue = CBIAbstractValue.extend(/** @lends LuCI.form.Value.prototype */ {
|
|||
if (depend_list && depend_list.length)
|
||||
optionEl.classList.add('hidden');
|
||||
|
||||
optionEl.addEventListener('widget-change',
|
||||
L.bind(this.handleValueChange, this, section_id, {}));
|
||||
|
||||
optionEl.addEventListener('widget-change',
|
||||
L.bind(this.map.checkDepends, this.map));
|
||||
|
||||
|
|
Loading…
Reference in a new issue