You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte组件内外on:blur事件回调能否同时执行?

解决Svelte子组件与父组件blur事件回调同时执行的问题

在Svelte中,子组件内部DOM元素绑定的事件默认不会自动触发组件本身的同名事件,可通过以下两种方式实现两个回调同时执行:

方法1:手动派发组件级blur事件

在子组件的input blur回调中,执行完自身逻辑后,手动触发组件的blur事件,让父组件绑定的回调得以执行。

CustomInput.svelte

<script>
  import { createEventDispatcher } from 'svelte';
  const dispatch = createEventDispatcher();

  function handleInputBlur() {
    console.log(1);
    // 手动派发组件的blur事件
    dispatch('blur');
  }
</script>

<input on:blur={handleInputBlur} />

App.svelte

<script>
  import CustomInput from './CustomInput.svelte';

  function handleComponentBlur() {
    console.log(2);
  }
</script>

<CustomInput on:blur={handleComponentBlur} />

方法2:自动转发DOM事件到组件

通过forwardEventsToDom选项,让子组件自动将内部DOM元素的事件转发到组件本身,无需手动派发。

CustomInput.svelte

<svelte:options forwardEventsToDom />

<script>
  function handleInputBlur() {
    console.log(1);
  }
</script>

<input on:blur={handleInputBlur} />

App.svelte代码与方法1一致。

两种方法对比

  • 方法1更灵活,可自定义事件触发时机,还能通过dispatch传递额外参数(如dispatch('blur', { value: input.value }));
  • 方法2更简洁,适合需要转发多个DOM事件的场景,无需逐个手动派发。

内容的提问来源于stack exchange,提问作者Faniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:25:58