Skip to content

Commit e5e41c7

Browse files
authoredAug 20, 2019
Merge pull request #3430 from sveltejs/gh-1233
don't set undefined input value
2 parents ee1fa87 + dcd9276 commit e5e41c7

File tree

5 files changed

+113
-2
lines changed

5 files changed

+113
-2
lines changed
 

‎src/compiler/compile/render_dom/wrappers/Element/Binding.ts

+4
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ function get_dom_updater(
208208
return `${element.var}.checked = ${condition};`;
209209
}
210210

211+
if (binding.node.name === 'value') {
212+
return `@set_input_value(${element.var}, ${binding.snippet});`
213+
}
214+
211215
return `${element.var}.${binding.node.name} = ${binding.snippet};`;
212216
}
213217

‎src/runtime/internal/dom.ts

+6
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,12 @@ export function set_data(text, data) {
169169
if (text.data !== data) text.data = data;
170170
}
171171

172+
export function set_input_value(input, value) {
173+
if (value != null || input.value) {
174+
input.value = value;
175+
}
176+
}
177+
172178
export function set_input_type(input, type) {
173179
try {
174180
input.type = type;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/* generated by Svelte vX.Y.Z */
2+
import {
3+
SvelteComponent,
4+
append,
5+
attr,
6+
detach,
7+
element,
8+
init,
9+
insert,
10+
listen,
11+
noop,
12+
run_all,
13+
safe_not_equal,
14+
set_input_value,
15+
space
16+
} from "svelte/internal";
17+
18+
function create_fragment(ctx) {
19+
var form, input, t, button, dispose;
20+
21+
return {
22+
c() {
23+
form = element("form");
24+
input = element("input");
25+
t = space();
26+
button = element("button");
27+
button.textContent = "Store";
28+
attr(input, "type", "text");
29+
input.required = true;
30+
31+
dispose = [
32+
listen(input, "input", ctx.input_input_handler),
33+
listen(form, "submit", ctx.handleSubmit)
34+
];
35+
},
36+
37+
m(target, anchor) {
38+
insert(target, form, anchor);
39+
append(form, input);
40+
41+
set_input_value(input, ctx.test);
42+
43+
append(form, t);
44+
append(form, button);
45+
},
46+
47+
p(changed, ctx) {
48+
if (changed.test && (input.value !== ctx.test)) set_input_value(input, ctx.test);
49+
},
50+
51+
i: noop,
52+
o: noop,
53+
54+
d(detaching) {
55+
if (detaching) {
56+
detach(form);
57+
}
58+
59+
run_all(dispose);
60+
}
61+
};
62+
}
63+
64+
function instance($$self, $$props, $$invalidate) {
65+
let test = undefined;
66+
67+
function handleSubmit(event) {
68+
event.preventDefault();
69+
console.log('value', test);
70+
}
71+
72+
function input_input_handler() {
73+
test = this.value;
74+
$$invalidate('test', test);
75+
}
76+
77+
return { test, handleSubmit, input_input_handler };
78+
}
79+
80+
class Component extends SvelteComponent {
81+
constructor(options) {
82+
super();
83+
init(this, options, instance, create_fragment, safe_not_equal, []);
84+
}
85+
}
86+
87+
export default Component;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<script>
2+
let test = undefined;
3+
4+
function handleSubmit(event) {
5+
event.preventDefault();
6+
console.log('value', test);
7+
}
8+
</script>
9+
10+
<form on:submit={handleSubmit}>
11+
<input bind:value={test} type=text required>
12+
<button>Store</button>
13+
</form>

‎test/js/samples/input-range/expected.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
noop,
1111
run_all,
1212
safe_not_equal,
13+
set_input_value,
1314
to_number
1415
} from "svelte/internal";
1516

@@ -30,11 +31,11 @@ function create_fragment(ctx) {
3031
m(target, anchor) {
3132
insert(target, input, anchor);
3233

33-
input.value = ctx.value;
34+
set_input_value(input, ctx.value);
3435
},
3536

3637
p(changed, ctx) {
37-
if (changed.value) input.value = ctx.value;
38+
if (changed.value) set_input_value(input, ctx.value);
3839
},
3940

4041
i: noop,

0 commit comments

Comments
 (0)
Please sign in to comment.