4 回答
TA贡献1815条经验 获得超12个赞
您想要阻止提交表单的默认行为。所以这样做:
checkoutButton.addEventListener('click', function(event) {
...
if(isFormValid==true) {
event.preventDefault();
TA贡献1847条经验 获得超11个赞
现在,click如果表单在页面加载时有效,您的代码仅附加侦听器。在没有其他表单行为的情况下,单击表单中的按钮会将其提交回其来源的页面,这就是它看起来像页面刷新的原因。
您需要将表单检查移动到按钮单击事件处理程序内,如下所示:
<script>
(function() {
var stripe = Stripe('pk_test_xxx');
var checkoutButton = document.getElementById('checkout-button-sku_xxx');
checkoutButton.addEventListener('click', function() {
if($('#tcform')[0].checkValidity()){
// When the customer clicks on the button, redirect
// them to Checkout.
stripe.redirectToCheckout({
items: [{
sku: 'sku_xxx',
quantity: 1
}],
// Do not rely on the redirect to the successUrl for fulfilling
// purchases, customers may not always reach the success_url after
// a successful payment.
// Instead use one of the strategies described in
// https://stripe.com/docs/payments/checkout/fulfillment
successUrl: window.location.protocol + '//www.xxx.com',
cancelUrl: window.location.protocol + '//www.xxx.com',
})
.then(function(result) {
if (result.error) {
// If `redirectToCheckout` fails due to a browser or network
// error, display the localized error message to your customer.
var displayError = document.getElementById('error-message');
displayError.textContent = result.error.message;
}
});
}
});
})();
但监听表单的submit事件可能会更好(https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event):
$('#tcform').on('submit', function() {
stripe.redirectToCheckout({
...
});
});
该submit事件仅在表单验证后才会发出。
TA贡献1712条经验 获得超3个赞
这也发生在我们身上。
我们已将novalidate
属性(删除 HTML5 验证)添加到表单并仅通过 javascript 进行验证。
<form id="tcform" novalidate> ... </form>
- 4 回答
- 0 关注
- 114 浏览
添加回答
举报