jquery on beforeSubmit没有在Safari上调用

时间:2017-06-03 18:40:41

标签: javascript jquery safari stripe-payments

我已经创建了一个带有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;
                    }
                });

有谁知道为什么会跳过这个?

1 个答案:

答案 0 :(得分:0)

好!所以解决方案实际上是我尝试的一些事情的组合。正如我原帖的评论所述,我首先需要改为使用'提交'而不是之前提交' (我认为这是Yii2特定的事情)。

但是,我必须更进一步。为了让它真正起作用,我还必须在事件上调用preventDefault()。

当我搞乱这段代码时,我也最终从stripe.js v2迁移到v3,所以我不确定这是否有帮助。

最终解决方案来了......

            var form = document.getElementById('payment-form');
            $('#payment-form').on('submit', function(e) {
                e.preventDefault();
                createToken();
            });

感谢大家的帮助!