diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2010-10-30 01:03:20 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2010-10-30 01:03:20 +0000 |
commit | 85a5d628ecded0d773ed09ec5e3509b3d8f818d4 (patch) | |
tree | 1af6f3293988543222b5484229de77393022c365 /libs | |
parent | a3e66af2a3e2e291ba3f737ac11365c5acc5d9c9 (diff) |
libs/web: live validation fixes
Diffstat (limited to 'libs')
-rw-r--r-- | libs/web/htdocs/luci-static/resources/cbi.js | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/libs/web/htdocs/luci-static/resources/cbi.js b/libs/web/htdocs/luci-static/resources/cbi.js index d5355f904b..b4137d4865 100644 --- a/libs/web/htdocs/luci-static/resources/cbi.js +++ b/libs/web/htdocs/luci-static/resources/cbi.js @@ -290,17 +290,21 @@ function cbi_combobox(id, values, def, man) { var obj = document.getElementById(id) var sel = document.createElement("select"); - sel.id = selid; - sel.className = 'cbi-input-select'; - if (obj.className && obj.className.match(/cbi-input-invalid/)) { - sel.className += ' cbi-input-invalid'; - } + sel.id = selid; + sel.className = 'cbi-input-select'; + if (obj.nextSibling) { obj.parentNode.insertBefore(sel, obj.nextSibling); } else { obj.parentNode.appendChild(sel); } + var dt = obj.getAttribute('cbi_datatype'); + var op = obj.getAttribute('cbi_optional'); + + if (dt) + cbi_validate_field(sel, op == 'true', dt); + if (!values[obj.value]) { if (obj.value == "") { var optdef = document.createElement("option"); @@ -342,10 +346,6 @@ function cbi_combobox(id, values, def, man) { obj.focus(); } else { obj.value = sel.options[sel.selectedIndex].value; - - var vld = obj.getAttribute("cbi_validate"); - sel.className = (!vld || vld()) - ? 'cbi-input-select' : 'cbi-input-select cbi-input-invalid'; } try { @@ -642,7 +642,9 @@ function cbi_validate_field(cbid, optional, type) field.className = field.className.replace(/ cbi-input-invalid/g, ''); // validate value - var value = (field.options) ? field.options[field.options.selectedIndex].value : field.value; + var value = (field.options && field.options.selectedIndex > -1) + ? field.options[field.options.selectedIndex].value : field.value; + if( !(((value.length == 0) && optional) || vldcb(value)) ) { // invalid @@ -662,11 +664,21 @@ function cbi_validate_field(cbid, optional, type) cbi_bind(field, "blur", validator); cbi_bind(field, "keyup", validator); + if (field.nodeName == 'SELECT') + { + cbi_bind(field, "change", validator); + cbi_bind(field, "click", validator); + } + field.setAttribute("cbi_validate", validator); field.setAttribute("cbi_datatype", type); field.setAttribute("cbi_optional", (!!optional).toString()); validator(); + + var fcbox = document.getElementById('cbi.combobox.' + field.id); + if (fcbox) + cbi_validate_field(fcbox, optional, type); } } |