Bird
Raised Fist0
Svelteframework~5 mins

Inline event handlers in Svelte

Choose your learning style10 modes available
Introduction

Inline event handlers let you run code right where you write your HTML. This makes it easy to respond to user actions like clicks or typing.

You want to run a simple action when a button is clicked.
You need to update a value immediately when a user types in a box.
You want to call a function directly from an element without extra setup.
You want to keep your code easy to read by putting event logic close to the element.
Syntax
Svelte
<element on:eventName={handlerFunction} />

Use on: followed by the event name, like click or input.

The handler can be a function or inline code inside curly braces.

Examples
This runs the handleClick function when the button is clicked.
Svelte
<button on:click={handleClick}>Click me</button>
This updates the name variable as the user types.
Svelte
<input on:input={(e) => name = e.target.value} placeholder="Type your name" />
This logs a message when the mouse moves over the div.
Svelte
<div on:mouseover={() => console.log('Hovered!')}>Hover over me</div>
Sample Program

This Svelte component shows a button that counts how many times you click it. The on:click inline event handler calls the increment function each time you click.

It also uses an aria-label for accessibility, so screen readers can describe the button.

Svelte
<script>
  let count = 0;
  function increment() {
    count += 1;
  }
</script>

<button on:click={increment} aria-label="Increment counter">Clicked {count} times</button>
OutputSuccess
Important Notes

Always use semantic HTML elements and add aria-label or other accessibility attributes when needed.

Inline handlers keep your code simple but avoid putting complex logic directly inside them.

Use Svelte DevTools in your browser to see events and state changes live.

Summary

Inline event handlers in Svelte use on:eventName={handler} syntax.

They let you respond quickly to user actions like clicks or typing.

Keep handlers simple and use accessibility attributes for better user experience.

Practice

(1/5)
1. What is the correct way to attach a click event handler named handleClick inline in a Svelte component?
easy
A. <button click={handleClick}>Click me</button>
B. <button onClick={handleClick}>Click me</button>
C. <button on:click={handleClick}>Click me</button>
D. <button @click={handleClick}>Click me</button>

Solution

  1. Step 1: Understand Svelte event syntax

    Svelte uses on:eventName={handler} to attach event handlers inline.
  2. Step 2: Match the syntax with the options

    <button on:click={handleClick}>Click me</button> correctly uses on:click={handleClick}, which is the Svelte pattern.
  3. Final Answer:

    <button on:click={handleClick}>Click me</button> -> Option C
  4. Quick Check:

    Inline event handler = on:eventName={handler} [OK]
Hint: Remember Svelte uses on:eventName, not onClick or @click [OK]
Common Mistakes:
  • Using React-style onClick instead of on:click
  • Omitting 'on:' prefix before event name
  • Using '@click' which is Vue syntax
2. Which of the following is the correct syntax to handle a keydown event inline in Svelte?
easy
A. <input on:keydown={handleKeydown} />
B. <input onkeydown={handleKeydown} />
C. <input @keydown={handleKeydown} />
D. <input keydown={handleKeydown} />

Solution

  1. Step 1: Recall Svelte event handler syntax

    Svelte requires the on: prefix before event names for inline handlers.
  2. Step 2: Identify the correct option

    <input on:keydown={handleKeydown} /> uses on:keydown={handleKeydown}, which is the correct Svelte syntax.
  3. Final Answer:

    <input on:keydown={handleKeydown} /> -> Option A
  4. Quick Check:

    Event handler syntax = on:eventName={handler} [OK]
Hint: Always prefix event with 'on:' in Svelte inline handlers [OK]
Common Mistakes:
  • Using React or Vue event syntax instead of Svelte's
  • Missing the colon ':' after 'on'
  • Using event name without any prefix
3. Given this Svelte code snippet, what will be the output when the button is clicked?
<script>
  let count = 0;
  function increment() {
    count += 1;
  }
</script>

<button on:click={increment}>Clicked {count} times</button>
medium
A. Runtime error occurs on click
B. Button text remains 'Clicked 0 times' even after clicks
C. Button text shows 'Clicked NaN times' after click
D. Button text updates to 'Clicked 1 times' after first click

Solution

  1. Step 1: Understand the event handler effect

    The increment function increases count by 1 on each click.
  2. Step 2: Observe reactive update in Svelte

    Svelte automatically updates the displayed {count} value when count changes.
  3. Final Answer:

    Button text updates to 'Clicked 1 times' after first click -> Option D
  4. Quick Check:

    State updates trigger UI change = Button text updates to 'Clicked 1 times' after first click [OK]
Hint: Svelte auto-updates UI when reactive variables change [OK]
Common Mistakes:
  • Expecting manual DOM update after state change
  • Confusing syntax causing runtime errors
  • Not realizing Svelte reactivity updates UI automatically
4. Identify the error in this Svelte code snippet:
<script>
  function sayHi() {
    alert('Hi!');
  }
</script>

<button on:click=sayHi>Say Hi</button>
medium
A. Missing curly braces around the handler function
B. Event name should be capitalized as on:Click
C. Function sayHi must be declared inside onMount
D. Alert cannot be used inside event handlers

Solution

  1. Step 1: Check event handler syntax

    Svelte requires the handler to be inside curly braces: on:click={sayHi}.
  2. Step 2: Identify the error in the code

    The code uses on:click=sayHi without braces, which is invalid syntax.
  3. Final Answer:

    Missing curly braces around the handler function -> Option A
  4. Quick Check:

    Handler must be in braces: on:event={handler} [OK]
Hint: Always wrap handler in curly braces for inline events [OK]
Common Mistakes:
  • Omitting curly braces around handler
  • Capitalizing event names incorrectly
  • Thinking functions must be inside lifecycle hooks
5. You want to create a Svelte button that increments a counter only if the Shift key is held during the click. Which inline event handler code correctly implements this?
hard
A. <button on:click={event => { if(event.shiftKey) count += 1 }}>Increment</button>
B. <button on:click={incrementIfShift}>Increment</button> <script> let count = 0; function incrementIfShift(event) { if (event.shiftKey) count += 1; } </script>
C. <button on:click={event => { if(event.key === 'Shift') count++ }}>Increment</button>
D. <button on:click={incrementIfShift}>Increment</button> <script> let count = 0; function incrementIfShift() { if (event.shiftKey) count += 1; } </script>

Solution

  1. Step 1: Understand event object usage in handlers

    To check if Shift is pressed, the event object must be accessed and passed to the handler.
  2. Step 2: Check each option for correct event parameter and condition

    <button on:click={incrementIfShift}>Increment</button> <script> let count = 0; function incrementIfShift(event) { if (event.shiftKey) count += 1; } </script> correctly defines incrementIfShift(event) and checks event.shiftKey. <button on:click={incrementIfShift}>Increment</button> <script> let count = 0; function incrementIfShift() { if (event.shiftKey) count += 1; } </script> misses the event parameter. <button on:click={event => { if(event.shiftKey) count += 1 }}>Increment</button> uses inline arrow function correctly but does not declare count in snippet. <button on:click={event => { if(event.key === 'Shift') count++ }}>Increment</button> incorrectly checks event.key on click event.
  3. Final Answer:

    Uses named function incrementIfShift(event) that checks event.shiftKey -> Option B
  4. Quick Check:

    Pass event param and check event.shiftKey inside handler [OK]
Hint: Pass event param to handler to access shiftKey property [OK]
Common Mistakes:
  • Not passing event parameter to handler function
  • Checking event.key on click event instead of shiftKey
  • Using inline handler without declaring count variable
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard