UNPKG

hellojs-xiaotian

Version:

A clientside Javascript library for standardizing requests to OAuth2 web services (and OAuth1 - with a shim)

33 lines (29 loc) 1.54 kB
ko.bindingHandlers['selectedOptions'] = { 'after': ['options', 'foreach'], 'init': function (element, valueAccessor, allBindings) { ko.utils.registerEventHandler(element, "change", function () { var value = valueAccessor(), valueToWrite = []; ko.utils.arrayForEach(element.getElementsByTagName("option"), function(node) { if (node.selected) valueToWrite.push(ko.selectExtensions.readValue(node)); }); ko.expressionRewriting.writeValueToProperty(value, allBindings, 'selectedOptions', valueToWrite); }); }, 'update': function (element, valueAccessor) { if (ko.utils.tagNameLower(element) != "select") throw new Error("values binding applies only to SELECT elements"); var newValue = ko.utils.unwrapObservable(valueAccessor()), previousScrollTop = element.scrollTop; if (newValue && typeof newValue.length == "number") { ko.utils.arrayForEach(element.getElementsByTagName("option"), function(node) { var isSelected = ko.utils.arrayIndexOf(newValue, ko.selectExtensions.readValue(node)) >= 0; if (node.selected != isSelected) { // This check prevents flashing of the select element in IE ko.utils.setOptionNodeSelectionState(node, isSelected); } }); } element.scrollTop = previousScrollTop; } }; ko.expressionRewriting.twoWayBindings['selectedOptions'] = true;