Input bindings let you connect a form input directly to a variable. This means when you type, the variable updates automatically, and if the variable changes, the input shows the new value.
You want to keep a text box and a variable in sync without writing extra code.
You need to update your app immediately when a user types in a form.
You want to show a live preview of what the user is typing.
You want to simplify form handling by avoiding manual event listeners.
Syntax
Svelte
<input bind:value={variable} />
The bind:value directive connects the input's value to the variable.
Changes in the input update the variable, and changes in the variable update the input.
Examples
This example binds the input to name. Typing updates name, and the greeting updates live.
Svelte
<script>
let name = '';
</script>
<input bind:value={name} />
<p>Hello {name}!</p>
Binding works with number inputs too. The variable age updates as you change the number.
Svelte
<script>
let age = 30;
</script>
<input type="number" bind:value={age} />
<p>Your age is {age}</p>
For checkboxes, use bind:checked instead of bind:value.
This component shows a text input bound to the message variable. Whatever you type appears live below. The input has an accessible label and is styled for clarity.
Input bindings work with text, number, textarea, and select elements.
For checkboxes and radio buttons, use bind:checked instead of bind:value.
Binding reduces the need for manual event handlers like on:input.
Summary
Input bindings connect form inputs directly to variables.
They keep the input and variable in sync automatically.
This makes handling user input simple and reactive.
Practice
(1/5)
1. What does bind:value do in a Svelte input element?
easy
A. It links the input's value to a variable, keeping them in sync.
B. It sets a fixed value that cannot be changed by the user.
C. It styles the input element with a CSS class named 'value'.
D. It disables the input field so the user cannot type.
Solution
Step 1: Understand the purpose of bind:value
In Svelte, bind:value connects the input's value to a variable so changes in one update the other automatically.
Step 2: Compare options with this behavior
Only It links the input's value to a variable, keeping them in sync. describes this syncing behavior correctly. Other options describe unrelated or incorrect behaviors.
Final Answer:
It links the input's value to a variable, keeping them in sync. -> Option A
Quick Check:
bind:value syncs input and variable = C [OK]
Hint: Remember: bind:value keeps input and variable synced [OK]
Common Mistakes:
Thinking bind:value sets a fixed value
Confusing bind:value with styling or disabling inputs
Assuming bind:value only sets initial value
2. Which of the following is the correct syntax to bind a variable name to an input's value in Svelte?
easy
A. <input value={name} />
B. <input bind:value:name />
C. <input bind:name={value} />
D. <input bind:value={name} />
Solution
Step 1: Recall Svelte binding syntax
The correct syntax to bind an input's value to a variable is bind:value={variable}.
Step 2: Check each option
<input bind:value={name} /> matches the correct syntax. <input value={name} /> only sets initial value without binding. Options B and C use incorrect binding syntax.
Final Answer:
<input bind:value={name} /> -> Option D
Quick Check:
Correct bind:value syntax = D [OK]
Hint: Use bind:value={variable} to sync input and variable [OK]
Common Mistakes:
Using value={name} without bind for two-way binding
Swapping variable and value in binding
Incorrect attribute names like bind:name
3. What will be displayed when the user types "Hello" in this Svelte component?
<script>
let text = '';
</script>
<input bind:value={text} />
<p>You typed: {text}</p>
medium
A. You typed: {text}
B. You typed:
C. You typed: Hello
D. SyntaxError
Solution
Step 1: Understand bind:value behavior
The input's value is bound to the variable text, so typing updates text immediately.
Step 2: Check displayed output
The paragraph shows You typed: {text}, which updates to the current input value, here "Hello".
Final Answer:
You typed: Hello -> Option C
Quick Check:
Input updates variable and display = A [OK]
Hint: bind:value updates variable instantly, reflected in output [OK]
Common Mistakes:
Expecting static text without updates
Thinking {text} shows literally instead of variable value
Assuming syntax error due to binding
4. Identify the error in this Svelte code snippet:
<script>
let age = 30;
</script>
<input bind:value=age />
medium
A. Variable age cannot be a number
B. Missing curly braces around variable in bind:value
C. bind:value should be bind:age
D. Input tag must be self-closed with a semicolon
Solution
Step 1: Check bind:value syntax
In Svelte, the variable must be inside curly braces: bind:value={age}.
Step 2: Validate other options
Variable age cannot be a number is wrong because numbers can be bound. bind:value should be bind:age uses wrong attribute. Input tag must be self-closed with a semicolon is invalid HTML advice.
Final Answer:
Missing curly braces around variable in bind:value -> Option B
Quick Check:
bind:value requires braces = B [OK]
Hint: Always wrap variables in {} inside bind:value [OK]
Common Mistakes:
Omitting curly braces in binding
Confusing bind:value with bind:variable
Thinking variable type matters for binding syntax
5. You want to create a form with two inputs bound to variables firstName and lastName. You also want to show the full name updating live as the user types. Which Svelte code correctly achieves this?
<script>
let firstName = '';
let lastName = '';
</script>
<!-- Options below -->
Step 1: Check input bindings for firstName and lastName
<input bind:value={firstName} placeholder="First" />
<input bind:value={lastName} placeholder="Last" />
<p>Full name: {firstName} {lastName}</p> correctly uses bind:value={firstName} and bind:value={lastName} to keep inputs synced with variables.
Step 2: Verify full name display
<input bind:value={firstName} placeholder="First" />
<input bind:value={lastName} placeholder="Last" />
<p>Full name: {firstName} {lastName}</p> displays full name as {firstName} {lastName}, which updates live. <input bind:value={firstName} placeholder="First" />
<input bind:value={lastName} placeholder="Last" />
<p>Full name: {firstName + lastName}</p> concatenates without space, which is less readable. Options B and C have incorrect bindings.