|
6 | 6 | // that are arbitrary objects. This is very convenient when implementing things like cascading dropdowns.
|
7 | 7 | ko.selectExtensions = {
|
8 | 8 | readValue : function(element) {
|
9 |
| - switch (element.tagName.toLowerCase()) { |
10 |
| - case 'option': |
11 |
| - if (element[hasDomDataExpandoProperty] === true) |
12 |
| - return ko.utils.domData.get(element, ko.bindingHandlers.options.optionValueDomDataKey); |
13 |
| - return element.getAttribute("value"); |
14 |
| - case 'select': |
15 |
| - return element.selectedIndex >= 0 ? ko.selectExtensions.readValue(element.options[element.selectedIndex]) : undefined; |
16 |
| - default: |
17 |
| - return element.value; |
| 9 | + switch (ko.utils.tagNameUpper(element)) { |
| 10 | + case 'OPTION': |
| 11 | + if (element[hasDomDataExpandoProperty] === true) |
| 12 | + return ko.utils.domData.get(element, ko.bindingHandlers.options.optionValueDomDataKey); |
| 13 | + return element.getAttribute("value"); |
| 14 | + case 'SELECT': |
| 15 | + return element.selectedIndex >= 0 ? ko.selectExtensions.readValue(element.options[element.selectedIndex]) : undefined; |
| 16 | + default: |
| 17 | + return element.value; |
18 | 18 | }
|
19 | 19 | },
|
20 | 20 |
|
21 | 21 | writeValue: function(element, value) {
|
22 |
| - switch (element.tagName.toLowerCase()) { |
23 |
| - case 'option': |
24 |
| - switch(typeof value) { |
25 |
| - case "string": |
26 |
| - ko.utils.domData.set(element, ko.bindingHandlers.options.optionValueDomDataKey, undefined); |
27 |
| - if (hasDomDataExpandoProperty in element) { // IE <= 8 throws errors if you delete non-existent properties from a DOM node |
28 |
| - delete element[hasDomDataExpandoProperty]; |
29 |
| - } |
30 |
| - element.value = value; |
31 |
| - break; |
32 |
| - default: |
33 |
| - // Store arbitrary object using DomData |
34 |
| - ko.utils.domData.set(element, ko.bindingHandlers.options.optionValueDomDataKey, value); |
35 |
| - element[hasDomDataExpandoProperty] = true; |
| 22 | + switch (ko.utils.tagNameUpper(element)) { |
| 23 | + case 'OPTION': |
| 24 | + switch(typeof value) { |
| 25 | + case "string": |
| 26 | + ko.utils.domData.set(element, ko.bindingHandlers.options.optionValueDomDataKey, undefined); |
| 27 | + if (hasDomDataExpandoProperty in element) { // IE <= 8 throws errors if you delete non-existent properties from a DOM node |
| 28 | + delete element[hasDomDataExpandoProperty]; |
| 29 | + } |
| 30 | + element.value = value; |
| 31 | + break; |
| 32 | + default: |
| 33 | + // Store arbitrary object using DomData |
| 34 | + ko.utils.domData.set(element, ko.bindingHandlers.options.optionValueDomDataKey, value); |
| 35 | + element[hasDomDataExpandoProperty] = true; |
36 | 36 |
|
37 |
| - // Special treatment of numbers is just for backward compatibility. KO 1.2.1 wrote numerical values to element.value. |
38 |
| - element.value = typeof value === "number" ? value : ""; |
39 |
| - break; |
40 |
| - } |
41 |
| - break; |
42 |
| - case 'select': |
43 |
| - for (var i = element.options.length - 1; i >= 0; i--) { |
44 |
| - if (ko.selectExtensions.readValue(element.options[i]) == value) { |
45 |
| - element.selectedIndex = i; |
46 |
| - break; |
| 37 | + // Special treatment of numbers is just for backward compatibility. KO 1.2.1 wrote numerical values to element.value. |
| 38 | + element.value = typeof value === "number" ? value : ""; |
| 39 | + break; |
| 40 | + } |
| 41 | + break; |
| 42 | + case 'SELECT': |
| 43 | + for (var i = element.options.length - 1; i >= 0; i--) { |
| 44 | + if (ko.selectExtensions.readValue(element.options[i]) == value) { |
| 45 | + element.selectedIndex = i; |
| 46 | + break; |
| 47 | + } |
47 | 48 | }
|
48 |
| - } |
49 |
| - break; |
50 |
| - default: |
51 |
| - if ((value === null) || (value === undefined)) |
52 |
| - value = ""; |
53 |
| - element.value = value; |
54 |
| - break; |
| 49 | + break; |
| 50 | + default: |
| 51 | + if ((value === null) || (value === undefined)) |
| 52 | + value = ""; |
| 53 | + element.value = value; |
| 54 | + break; |
55 | 55 | }
|
56 | 56 | }
|
57 | 57 | };
|
|
0 commit comments