From 207fc0121e3f123067c4a74ae922578601f964c3 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Mon, 5 Nov 2018 16:52:05 +0100 Subject: [PATCH] luci-base: cbi.js: set .value property of cbi dropdown elements In order to make cbi dropdowns usable for validation and other code expecting native form elements, set the .value DOM property on the dropdown parent element whenever the selection is changed. Signed-off-by: Jo-Philipp Wich --- .../htdocs/luci-static/resources/cbi.js | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js index 3351cc8e9..662e772bb 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi.js +++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -833,6 +833,7 @@ function cbi_combobox_init(id, values, def, man) { }) ])); + sb.value = obj.value; obj.parentNode.replaceChild(sb, obj); } @@ -1729,6 +1730,7 @@ CBIDropdown = { saveValues: function(sb, ul) { var sel = ul.querySelectorAll('li[selected]'), div = sb.lastElementChild, + strval = '', values = []; while (div.lastElementChild) @@ -1738,17 +1740,21 @@ CBIDropdown = { if (s.hasAttribute('placeholder')) return; + var v = { + text: s.innerText, + value: s.hasAttribute('data-value') ? s.getAttribute('data-value') : s.innerText, + element: s + }; + div.appendChild(E('input', { type: 'hidden', name: s.hasAttribute('name') ? s.getAttribute('name') : (sb.getAttribute('name') || ''), - value: s.hasAttribute('data-value') ? s.getAttribute('data-value') : s.innerText + value: v.value })); - values.push({ - text: s.innerText, - value: s.hasAttribute('data-value') ? s.getAttribute('data-value') : s.innerText, - element: s - }); + values.push(v); + + strval += strval.length ? ' ' + v.value : v.value; }); var detail = { @@ -1761,6 +1767,8 @@ CBIDropdown = { else detail.value = values.length ? values[0] : null; + sb.value = strval; + sb.dispatchEvent(new CustomEvent('cbi-dropdown-change', { bubbles: true, detail: detail -- 2.25.1