libs/cbi: Optimized Comboboxes
[project/luci.git] / libs / cbi / htdocs / luci-static / resources / cbi.js
index 38e27d8..7cb2f7c 100644 (file)
@@ -60,46 +60,50 @@ function cbi_bind(obj, type, callback, mode) {
 
 function cbi_combobox(id, values, def, man) {
        var obj = document.getElementById(id)
-       if (obj.value == "" || values[obj.value]) {
-               var sel = document.createElement("select")
-               obj.parentNode.appendChild(sel)
+       var sel = document.createElement("select");
+       obj.parentNode.appendChild(sel);
 
-               if (obj.value == "") {
-                       var optdef = document.createElement("option")
-                       optdef.value = ""
-                       optdef.appendChild(document.createTextNode(def))
-                       sel.appendChild(optdef)
-               }
-
-               for (var i in values) {
-                       var opt = document.createElement("option")
-                       opt.value = i
+       if (obj.value == "") {
+               var optdef = document.createElement("option");
+               optdef.value = "";
+               optdef.appendChild(document.createTextNode(def));
+               sel.appendChild(optdef);
+       } else if (!values[obj.value]) {
+               var opt = document.createElement("option");
+               opt.value = obj.value;
+               opt.selected = "selected";
+               opt.appendChild(document.createTextNode(obj.value));
+               sel.appendChild(opt);   
+       }
 
-                       if (obj.value == i) {
-                               opt.selected = "selected"
-                       }
+       for (var i in values) {
+               var opt = document.createElement("option");
+               opt.value = i;
 
-                       opt.appendChild(document.createTextNode(values[i]))
-                       sel.appendChild(opt)
+               if (obj.value == i) {
+                       opt.selected = "selected";
                }
 
-               var optman = document.createElement("option")
-               optman.value = ""
-               optman.appendChild(document.createTextNode(man))
-               sel.appendChild(optman)
+               opt.appendChild(document.createTextNode(values[i]));
+               sel.appendChild(opt);
+       }
+
+       var optman = document.createElement("option");
+       optman.value = "";
+       optman.appendChild(document.createTextNode(man));
+       sel.appendChild(optman);
 
-               obj.style.display = "none"
+       obj.style.display = "none";
 
-               cbi_bind(sel, "change", function() {
-                       obj.value = sel.options[sel.selectedIndex].value
+       cbi_bind(sel, "change", function() {
+               obj.value = sel.options[sel.selectedIndex].value;
 
-                       if (sel.selectedIndex == sel.options.length - 1) {
-                               obj.style.display = "inline"
-                               sel.parentNode.removeChild(sel)
-                               obj.focus()
-                       }
-               })
-       }
+               if (sel.selectedIndex == sel.options.length - 1) {
+                       obj.style.display = "inline";
+                       sel.parentNode.removeChild(sel);
+                       obj.focus();
+               }
+       })
 }
 
 function cbi_combobox_init(id, values, def, man) {