繁体   English   中英

Stripe:此元素将挂载到包含子节点的 DOM 元素

[英]Stripe: This Element will be mounted to a DOM element that contains child nodes

我正在运行 stripe v3,它在 Web 控制台中给了我这个警告。

This Element will be mounted to a DOM element that contains child nodes.
  1. 为什么元素包含“子节点”很重要。
  2. 如何最好地解决此问题以消除警告并解决问题。

我的 Stripe 代码目前与 Stripe Elements 设置中推荐的代码相同。

参考: https : //stripe.com/docs/stripe-js/elements/quickstart

// Create a Stripe client
var stripe = Stripe('pk_test_bJA9VLD3BN4LYxPWPfJ5vcjk');

// Create an instance of Elements
var elements = stripe.elements();

// Custom styling can be passed to options when creating an Element.
// (Note that this demo uses a wider set of styles than the guide below.)
var style = {
  base: {
    color: '#32325d',
    lineHeight: '18px',
    fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
    fontSmoothing: 'antialiased',
    fontSize: '16px',
    '::placeholder': {
      color: '#aab7c4'
    }
  },
  invalid: {
    color: '#fa755a',
    iconColor: '#fa755a'
  }
};

// Create an instance of the card Element
var card = elements.create('card', {style: style});

// Add an instance of the card Element into the `card-element` <div>
card.mount('#card-element');

// Handle real-time validation errors from the card Element.
card.addEventListener('change', function(event) {
  var displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
});

// Handle form submission
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(event) {
  event.preventDefault();

  stripe.createToken(card).then(function(result) {
    if (result.error) {
      // Inform the user if there was an error
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
    } else {
      // Send the token to your server
      stripeTokenHandler(result.token);
    }
  });
});
  1. 这是一个问题,因为子节点将被替换为元素。

  2. 确保您安装 Element 的 DOM 节点没有任何子节点。 例如,在您的示例中,确保card-element div 没有任何子节点。

您提到您正在使用推荐的设置代码。 给出的代码在 card-element 中有一个注释:

<div id="card-element">
  <!-- a Stripe Element will be inserted here. -->
</div>

删除它并享受无错误的控制台。

为时已晚,但可能会帮助其他人。

你不需要写

<input type="text" id="card_number">

您可以用 div 替换输入行

 <div id="card_number" class="form-control"></div>

您的前端代码可能在 stripe 元素内嵌套了一些东西。 这是不允许的,因为 stripe 会将它自己的 DOM 元素嵌套在#card-element #card-element必须保持为空。

例子:你写这个...

<div class="form-row">
  <div class="col-md-6">
    <label for="card-element">Elements</label>
    <div id="card-element" class="form-control"></div>
  </div>
</div>

但它呈现为:

<div class="form-row">
  <div class="col-md-6">
    <label for="card-element">Elements</label>
    <div id="card-element" class="form-control">
      <div class="__PrivateStripeElement"></div>
    </div>
  </div>
</div>

当加载到页面上时,stripe 将自己的div添加到#card-element ,该#card-element包含一个带有许多行附加代码的iframe

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM