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

vue-credit-card组件CVC输入聚焦时卡片无法切换问题求助

解决vue-credit-card组件CVC聚焦时卡片不切换背面的问题

嘿,我刚好熟悉这个vue-credit-card组件,帮你拆解下问题:你现在的代码里虽然定义了focused变量,但既没把它传递给卡片组件,也没和CVC输入框的聚焦事件绑定,所以卡片根本不知道什么时候要切换到背面。

下面是一步步的修复方案:


1. 给卡片组件传递focused属性

这个组件的卡片切换逻辑是靠focused属性控制的:当它的值为'cvc'时,卡片显示背面;为false或其他值时显示正面。先把你的focused变量传给<card>组件:

<card :value="{number, name, expiry, cvc}" :focused="focused"></card>

2. 给CVC输入框绑定聚焦/失焦事件

接下来要让CVC输入框的聚焦状态同步到focused变量上,添加@focus和@blur事件:

<v-text-field 
  v-model="cvc" 
  :rules="cvcRules" 
  label="cvc" 
  name="cvc" 
  required
  @focus="focused = 'cvc'"
  @blur="focused = false"
></v-text-field>

另外,给其他输入框也加上@blur="focused = false",这样点击其他输入框时,卡片会切回正面,交互体验更流畅。

3. 修正focused的初始值

你之前把focused设成了字符串'false',这会导致组件的状态判断逻辑出错,改成布尔值false就对了:

data () {
  return {
    // ...其他变量
    focused: false
  }
}

4. 完整修正后的代码

Template部分:

<template>
  <div class="card mb-5 mb-lg-0 p-2">
    <div class="card-body">
      <card :value="{number, name, expiry, cvc}" :focused="focused"></card>
      <v-form>
        <v-container fluid>
          <v-layout>
            <v-flex xs24>
              <v-text-field 
                v-model="name" 
                :rules="nameRules" 
                label="İsim Soyisim" 
                required
                @blur="focused = false"
              ></v-text-field>
            </v-flex>
          </v-layout>
          <v-layout>
            <v-flex xs12>
              <v-text-field 
                v-model="number" 
                :rules="cardRules" 
                label="Kart Numarası" 
                required
                @blur="focused = false"
              ></v-text-field>
            </v-flex>
          </v-layout>
          <v-layout>
            <v-flex xs12>
              <v-text-field 
                v-model="expiry" 
                :rules="expiryRules" 
                label="Son Kullanma Tarihi" 
                required
                @blur="focused = false"
              ></v-text-field>
            </v-flex>
            <v-flex xs12>
              <v-text-field 
                v-model="cvc" 
                :rules="cvcRules" 
                label="cvc" 
                name="cvc" 
                required
                @focus="focused = 'cvc'"
                @blur="focused = false"
              ></v-text-field>
            </v-flex>
          </v-layout>
        </v-container>
      </v-form>
    </div>
  </div>
</template>

Script部分:

<script>
import Card from 'vue-credit-card';
export default {
  name: 'CheckoutForm',
  data () {
    return {
      number : '',
      name : '',
      expiry : '',
      cvc : '',
      nameRules: [
        v => !!v || 'Lütfen adınızı ve soyadınızı giriniz.',
        v => v.length > 3 || 'En az 3 karakter uzunluğunda olmalıdır.'
      ],
      cardRules: [
        v => !!v || 'Lütfen Kart Numarasını giriniz.',
        v => v.length > 15 || 'En az 15 karakter uzunluğunda olmalıdır.'
      ],
      expiryRules: [
        v => !!v || 'Lütfen kartınıza ait son kullanma tarihini giriniz.',
        v => v.length > 4 || 'En az 4 karakter uzunluğunda olmalıdır.'
      ],
      cvcRules: [
        v => !!v || 'Lütfen kartınızın arkasında bulunan CVC numarasını giriniz.',
        v => v.length > 3 || 'En az 4 karakter uzunluğunda olmalıdır.'
      ],
      focused : false
    }
  },
  components: {
    Card
  }
}
</script>

关于之前v-card-focus失效的说明

这个组件的v-card-focus指令其实是用来自动关联输入框和卡片聚焦状态的,但它需要组件内部的状态支持,有时候在和Vuetify的v-text-field配合时会有兼容性问题。手动绑定聚焦事件的方式反而更可靠,也更容易调试。

现在测试一下:点击CVC输入框,卡片应该会立刻切换到背面;点击其他输入框或者页面空白处,卡片就切回正面了~

内容的提问来源于stack exchange,提问作者Hayreddin Tüzel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:59:38