我已经创建了一个带有Stripe的付款表单,需要与他们的API进行交互才能在我的表单提交之前获取令牌。所有内容都经过测试并在Chrome中运行,但昨天用户表示它无法在Safari中运行。
在执行以下代码之前,我已经能够将原因缩小到Safari提交表单:
$('#payment-form').on('beforeSubmit', function(event) {
if (isCcNeeded()) {
// Disable the submit button to prevent repeated clicks:
$('#payment-form').find('.submit').prop('disabled', true);
// Request a token from Stripe:
Stripe.card.createToken({
number: $('input#stripe-card-number').val(),
cvc: $('input#stripe-cvc').val(),
exp_month: getExpMonth(),
exp_year: getExpYear(),
address_zip: $('input#stripe-address-zip').val()
}, stripeResponseHandler);
// Prevent the form from being submitted:
return false;
}
});
有谁知道为什么会跳过这个?
答案 0 :(得分:0)
好!所以解决方案实际上是我尝试的一些事情的组合。正如我原帖的评论所述,我首先需要改为使用'提交'而不是之前提交' (我认为这是Yii2特定的事情)。
但是,我必须更进一步。为了让它真正起作用,我还必须在事件上调用preventDefault()。
当我搞乱这段代码时,我也最终从stripe.js v2迁移到v3,所以我不确定这是否有帮助。
最终解决方案来了......
var form = document.getElementById('payment-form');
$('#payment-form').on('submit', function(e) {
e.preventDefault();
createToken();
});
感谢大家的帮助!