diff --git a/src/NodeBind.js b/src/NodeBind.js index 270c557..9617577 100644 --- a/src/NodeBind.js +++ b/src/NodeBind.js @@ -173,7 +173,8 @@ var eventType = getEventForInputType(input); function eventHandler() { - observable.setValue(input[property]); + var isNum = property == 'value' && input.type == 'number'; + observable.setValue(isNum ? input.valueAsNumber : input[property]); observable.discardChanges(); (postEventFn || noop)(input); Platform.performMicrotaskCheckpoint(); diff --git a/tests/tests.js b/tests/tests.js index f0f1f0f..8fcbb9e 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -652,6 +652,22 @@ suite('Form Element Bindings', function() { radioInputCheckedMultipleForms(shadowRoot, done); }); + test('(Number)Input.value', function(done) { + var input = testDiv.appendChild(document.createElement('input')); + testDiv.appendChild(input); + input.type = 'number'; + var model = {x: 0}; + bindings.push(input.bind('value', new PathObserver(model, 'x'))); + input.value = "999"; + + then(function() { + dispatchEvent('input', input); + assert.isNumber(model.x); + assert.strictEqual(999, model.x); + done(); + }); + }); + test('Select.selectedIndex', function(done) { var select = testDiv.appendChild(document.createElement('select')); testDiv.appendChild(select);