📖 Scenario: You are building a simple interactive button on a webpage. When the user clicks the button, it should update a message shown on the page.
🎯 Goal: Create a Svelte component with a button that changes a message when clicked using the on:click event listener.
📋 What You'll Learn
Create a variable to hold the message text
Add a button element with an on:click event listener
Update the message variable inside the click event handler
Display the message text in the component
💡 Why This Matters
🌍 Real World
Buttons with click events are everywhere on websites and apps. Learning to handle clicks lets you make interactive features like forms, menus, and games.
💼 Career
Understanding event listeners in Svelte is essential for frontend developers building modern web applications with reactive user interfaces.
Progress0 / 4 steps
1
Set up the message variable
Create a variable called message and set it to the string "Hello!" inside the <script> tag.
Svelte
Hint
Use let message = "Hello!"; inside the <script> tag.
2
Add the button element
Add a <button> element below the paragraph with the text Click me.
Svelte
Hint
Write <button>Click me</button> below the paragraph.
3
Add the click event listener
Add an on:click event listener to the <button> that changes the message variable to "Button clicked!".
Svelte
Hint
Use on:click={() => message = "Button clicked!"} inside the <button> tag.
4
Complete the interactive component
Ensure the component shows the updated message text when the button is clicked by keeping the paragraph displaying {message}.
Svelte
Hint
Make sure the paragraph uses {message} to show the current message.
Practice
(1/5)
1. What does the on:click directive do in a Svelte component?
easy
A. It styles the element when clicked.
B. It runs code when the user clicks on the element.
C. It prevents the element from being clicked.
D. It changes the element's text automatically.
Solution
Step 1: Understand the purpose of on:click
The on:click directive listens for click events on an element.
Step 2: Identify what happens on click
When the element is clicked, the code inside the handler runs.
Final Answer:
It runs code when the user clicks on the element. -> Option B
Quick Check:
on:click runs code on click [OK]
Hint: Remember: on:click runs code when clicked [OK]
Common Mistakes:
Thinking it styles the element automatically
Believing it disables clicks
Assuming it changes text without code
2. Which of the following is the correct syntax to run a function handleClick when a button is clicked in Svelte?
easy
A. Click me
B. Click me
C. Click me
D. Click me
Solution
Step 1: Recall Svelte event syntax
Svelte uses on:eventName={handler} syntax for event listeners.
Step 2: Match correct syntax
on:click={handleClick} is the correct way to attach the click handler.
Final Answer:
<button on:click={handleClick}>Click me</button> -> Option A
Quick Check:
Svelte uses on:eventName syntax [OK]
Hint: Use on:click={function} for click events [OK]
Common Mistakes:
Using React style onClick instead of on:click
Swapping event and on keywords
Using @click which is Vue syntax
3. Given this Svelte code:
<script>
let count = 0;
function increment() {
count += 1;
}
</script>
<button on:click={increment}>Clicked {count} times</button>
What will the button display after clicking it 3 times?
medium
A. Clicked 0 times
B. Clicked 1 times
C. Clicked 3 times
D. Clicked NaN times
Solution
Step 1: Understand the initial state and function
The variable count starts at 0. The increment function adds 1 to count each click.
Step 2: Calculate count after 3 clicks
After 3 clicks, count becomes 0 + 3 = 3.
Final Answer:
Clicked 3 times -> Option C
Quick Check:
count increments by 1 per click [OK]
Hint: Count increases by 1 each click [OK]
Common Mistakes:
Forgetting to update count on click
Assuming count resets
Confusing initial value with updated value
4. What is wrong with this Svelte code snippet?
<button on:click=increment()>Click me</button>
<script>
let count = 0;
function increment() {
count += 1;
}
</script>
medium
A. The function call should be inside curly braces: on:click={increment}
B. The function increment is missing parentheses in the script
C. The count variable should be declared inside the button
D. The on:click event should be written as onClick
Solution
Step 1: Check event handler syntax
In Svelte, event handlers must be assigned a function reference inside curly braces, not called immediately.
Step 2: Identify the error
Using on:click=increment() calls the function immediately instead of on click. Correct is on:click={increment}.
Final Answer:
The function call should be inside curly braces: on:click={increment} -> Option A
Quick Check:
Use on:click={function} not on:click=function() [OK]
Hint: Use curly braces for function references in on:click [OK]
Common Mistakes:
Calling function immediately instead of passing reference
Using React style onClick instead of on:click
Placing variables inside HTML tags incorrectly
5. You want to create a Svelte component with two buttons: one increments a counter, the other resets it to zero. Which code correctly implements this behavior?
hard
A.
<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button onClick={increment}>Increment</button>
<button onClick={reset}>Reset</button>
<p>Count: {count}</p>
B.
<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click={increment()}>Increment</button>
<button on:click={reset()}>Reset</button>
<p>Count: {count}</p>
C.
<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click=increment>Increment</button>
<button on:click=reset>Reset</button>
<p>Count: {count}</p>
D.
<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click={increment}>Increment</button>
<button on:click={reset}>Reset</button>
<p>Count: {count}</p>
Solution
Step 1: Check event handler syntax correctness
<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click={increment}>Increment</button>
<button on:click={reset}>Reset</button>
<p>Count: {count}</p>
uses on:click={increment} and on:click={reset}, which is correct Svelte syntax.
Step 2: Identify errors in other options
<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click={increment()}>Increment</button>
<button on:click={reset()}>Reset</button>
<p>Count: {count}</p>
calls functions immediately, which is wrong.
<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click=increment>Increment</button>
<button on:click=reset>Reset</button>
<p>Count: {count}</p>
misses curly braces.
<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button onClick={increment}>Increment</button>
<button onClick={reset}>Reset</button>
<p>Count: {count}</p>
uses React style onClick, invalid in Svelte.
Final Answer:
Correct syntax: on:click={increment} and on:click={reset} -> Option D
Quick Check:
Use on:click={function} with curly braces [OK]
Hint: Pass function references with curly braces in on:click [OK]
Common Mistakes:
Calling functions immediately in event handlers
Omitting curly braces around handlers
Using React event syntax instead of Svelte
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.