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

Vuetify日历@click:more触发@click:day问题解决方案求助

解决v-calendar点击“更多事件”触发@click:day的问题

问题核心在于v-calendar的@click:more是自定义组件事件,抛出的参数不是原生DOM事件,所以用.stop修饰符会报错——因为这个参数根本没有stopPropagation方法。同时原生的“更多事件”按钮点击事件会冒泡到父级的day点击事件,导致两个事件同时触发。

给你两个可行的解决办法:

方法一:自定义“更多事件”按钮(推荐)

利用event-more插槽替换原生按钮,在自定义按钮上使用@click.stop阻止冒泡,完全可控:

<v-calendar
  @click:day="handleDayClick"
>
  <template #event-more="{ events, date }">
    <!-- 自定义按钮,用@click.stop阻止冒泡到day的点击事件 -->
    <v-btn 
      @click.stop="handleMoreClick({ events, date })" 
      size="small"
    >
      更多事件 ({{ events.length }})
    </v-btn>
  </template>
</v-calendar>

在脚本里正常编写处理函数:

const handleDayClick = (date) => {
  // 处理日期点击逻辑
}

const handleMoreClick = ({ events, date }) => {
  // 处理更多事件逻辑,比如打开模态框展示所有事件
}

这种方法和你之前解决@click:event问题的思路一致,通过插槽接管元素,直接控制事件行为,最可靠也最灵活。

方法二:在day点击事件里判断来源

如果不想自定义插槽,可以在handleDayClick里检查点击的DOM元素是否属于“更多事件”按钮,不过这种方法依赖组件内部的DOM结构,后续组件更新可能失效:

const handleDayClick = (date, evt) => {
  // 检查点击目标是否是更多事件按钮(根据v-calendar的默认类名判断)
  if (evt.target.closest('.v-calendar-event-more')) {
    return // 是更多按钮,直接返回不执行day的逻辑
  }
  // 正常处理日期点击逻辑
}

注意:可以通过浏览器开发者工具确认v-calendar默认“更多事件”按钮的类名是否为v-calendar-event-more。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:24:22