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

如何监听Stripe cardElement输入事件判断卡片有效性并禁用按钮

Stripe信用卡验证与提交防重复实现方案

问题根因

你当前无法触发cardElement.on()事件的核心原因是事件监听逻辑被写在了提交触发的createOrder方法中,只有用户点击提交按钮时才会绑定监听,用户输入信用卡信息的阶段没有对应监听器运行,自然无法捕获输入变更事件。

具体修改步骤

1. 新增响应式状态变量

在Vue实例的data中新增两个状态变量,分别用于标记信用卡是否合法、提交是否处于加载中:

data() {
  return {
    // 原有其他变量
    isCardValid: false,
    isLoading: false
  }
}

2. 在mounted阶段绑定信用卡输入监听

在Stripe Card元素挂载完成后直接绑定change事件监听,实时更新信用卡合法状态:

async mounted() {
  const stripe = await loadStripe(process.env.VUE_APP_STRIPE_PK);
  const elements = stripe.elements();
  const card = elements.create("card", { style: style });
  card.mount("#stripe-element-card");
  
  // 绑定信用卡输入变更监听
  card.on('change', (event) => {
    // 处理错误提示
    const errorDom = document.getElementById('card-error');
    errorDom.textContent = event.error ? event.error.message : '';
    // 同步信用卡合法状态
    this.isCardValid = event.complete;
  });
}

3. 修改提交按钮禁用逻辑

调整按钮的disabled判断条件,同时满足表单验证通过、信用卡有效、未处于加载中三个条件才可点击:

<button
  v-if="toggleUserInfo"
  id="submit"
  class="stripe"
  :disabled="$v.$invalid || !isCardValid || isLoading"
  type="submit"
>
  <div
    id="spinner"
    class="spinner"
    :class="{ hidden: !isLoading }"
  ></div>
  <span id="button-text" :class="{ hidden: isLoading }">Pay now</span>
</button>

4. 调整createOrder提交逻辑

删除原有方法内的事件绑定代码,新增加载状态控制,防止重复提交:

async createOrder(event) {
  this.isLoading = true;
  this.$v.$touch();
  
  // 前置校验不通过直接终止流程,重置加载状态
  if (this.$v.$invalid || !this.isCardValid) {
    this.isLoading = false;
    return;
  }

  try {
    // 原有订单信息收集、Stripe支付逻辑
    const cardElement = elements.getElement("card");
    const billingDetails = {
      name: user.name,
      address: {
        city: user.city,
        line1: user.street,
        state: "NY"
      },
      phone: user.phone
    };
    // 后续支付、订单创建逻辑
    // ...
    // 支付成功后执行重定向
  } catch (err) {
    // 错误提示逻辑
    console.error('支付失败', err);
  } finally {
    // 无论成功失败都重置加载状态,恢复按钮可点击性
    this.isLoading = false;
  }
}

内容的提问来源于stack exchange,提问作者Kevin T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:09:03