📖 Scenario: You are building a simple web form where users can type their name and see it displayed live on the page.
🎯 Goal: Create a Svelte component that uses bind:value to connect an input field to a variable, so the typed name updates the displayed text immediately.
📋 What You'll Learn
Create a variable called name initialized to an empty string.
Add an <input> element with bind:value={name} to link the input to the variable.
Display the current value of name below the input field inside a <p> tag.
Use semantic HTML and ensure the input has an accessible label.
💡 Why This Matters
🌍 Real World
Input bindings let users type data and see instant updates on the page, useful for forms, search boxes, and interactive apps.
💼 Career
Understanding input bindings is essential for building responsive user interfaces in modern web development frameworks like Svelte.
Progress0 / 4 steps
1
Create the name variable
Create a variable called name and set it to an empty string '' inside the <script> tag.
Svelte
Hint
Use let name = ''; inside the <script> tag to create the variable.
2
Add an input with bind:value
Add an <input> element with bind:value={name} inside the component's HTML. Also add a <label> with for="nameInput" and text "Enter your name:". Give the input an id="nameInput".
Svelte
Hint
Use <input id="nameInput" bind:value={name} /> and a matching <label for="nameInput">.
3
Display the live value of name
Add a <p> tag below the input that shows the text "Your name is: " followed by the current value of the name variable using curly braces.
Svelte
Hint
Use <p>Your name is: {name}</p> to show the live value.
4
Add accessibility and finalize
Ensure the input has the aria-label="Name input field" attribute for accessibility. Add a <main> tag wrapping all content for semantic structure.
Svelte
Hint
Wrap all content inside <main> and add aria-label="Name input field" to the input.
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.