[英]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.
我的 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);
}
});
});
这是一个问题,因为子节点将被替换为元素。
确保您安装 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.