Skip to content

Commit b5b484b

Browse files
authored
Merge pull request #606 from sveltejs/gh-584
coerce empty string in number/range inputs to undefined
2 parents 66a1fd7 + 6ae01b6 commit b5b484b

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

src/generators/dom/visitors/Element/Binding.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ function getBindingValue ( generator: DomGenerator, block: Block, state: State,
190190

191191
// <input type='range|number' bind:value>
192192
if ( type === 'range' || type === 'number' ) {
193-
return `+${state.parentNode}.${attribute.name}`;
193+
return `${generator.helper( 'toNumber' )}( ${state.parentNode}.${attribute.name} )`;
194194
}
195195

196196
// everything else

src/shared/dom.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,8 @@ export function getBindingGroupValue ( group ) {
6060
if ( group[i].checked ) value.push( group[i].__value );
6161
}
6262
return value;
63+
}
64+
65+
export function toNumber ( value ) {
66+
return value === '' ? undefined : +value;
6367
}

test/runtime/samples/binding-input-number/_config.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,15 @@ export default {
2929
<input type='number'>
3030
<p>number 44</p>
3131
` );
32+
33+
// empty string should be treated as undefined
34+
input.value = '';
35+
input.dispatchEvent( event );
36+
37+
assert.equal( component.get( 'count' ), undefined );
38+
assert.htmlEqual( target.innerHTML, `
39+
<input type='number'>
40+
<p>undefined undefined</p>
41+
` );
3242
}
3343
};

0 commit comments

Comments
 (0)