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

如何为Vue Multiselect禁用选项添加Tooltip/标题并处理点击问题?

解决Vue Multiselect禁用选项显示Tooltip并阻止点击报错的问题

核心思路

要实现禁用选项显示Tooltip,需先让禁用选项能接收鼠标事件(移除默认的pointer-events: none),同时阻止禁用选项的点击类事件,避免触发组件内部选择逻辑导致报错。

具体实现步骤

1. 调整CSS,恢复禁用选项的鼠标事件响应

Vue Multiselect给禁用选项默认添加了.multiselect__option--disabled类,并设置pointer-events: none,导致Tooltip无法触发。我们需要覆盖这个样式(建议添加自定义容器类避免全局污染):

.select-buy-currency .multiselect__option--disabled {
  pointer-events: auto !important;
  /* 保留禁用状态的视觉效果 */
  opacity: 0.6;
}

2. 在自定义选项模板中阻止禁用选项的点击事件

在option插槽模板里,针对禁用选项动态设置Tooltip内容,并阻止mousedown和click事件(这两个是触发组件选择逻辑的关键事件):

<multiselect
    v-model="buyCurrency"
    :options="canBuyCurrencies"
    :show-labels="false"
    :searchable="false"
    :allow-empty="false"
    :clear-on-select="false"
    :close-on-select="true"
    class="select-buy-currency"
    @select="handleBuyCurrencyChange"
>
  <template slot="option" slot-scope="props">
    <div 
      :title="props.$isDisabled ? '该货币暂不可用' : ''" 
      class="d-flex flex-row justify-content-apart align-items-center"
      <!-- 阻止禁用选项的点击类事件,避免组件内部报错 -->
      @mousedown.prevent="props.$isDisabled && true"
      @click.prevent="props.$isDisabled && true"
    >
      <img
          class="option__image"
          :src="`/img/flags/${props.option.code}.svg`"
          :alt="props.option.code"
      />
      <div class="option__desc">
        <span class="option__title">
          {{ props.option.code }}
        </span>
      </div>
    </div>
  </template>
</multiselect>

原理说明

  • 恢复pointer-events: auto后,鼠标可悬停在禁用选项上,触发title属性显示Tooltip;
  • 通过@mousedown.prevent和@click.prevent阻止禁用选项的点击事件传递到Vue Multiselect外层元素,避免触发组件内部选择逻辑,也就不会出现Cannot read properties of undefined (reading 'every')的报错;
  • 非禁用选项不受影响,依然可以正常选择。

内容的提问来源于stack exchange,提问作者M.KH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:55:34