1

これを簡単にするために、検証中のフォームの 1 つだけを含めました。すべてが正しく検証されますが、トークンが生成されない理由がわかりません。フォームは送信されません。問題が何であるかを確認せずに、フォームが正しく機能していました。

var oeValidate = {
    'name' : function() {
        var ele = $('#name');

        if(ele.val().length < 6) {
            oeValidate.errors = true;
            ele.removeClass('correct').addClass('error');
        } else {
            ele.removeClass('error').addClass('correct');
        }
    },

    'sendIt' : function() {
        if(!oeValidate.errors) {
            $('#payment-form').submit(function(event){
                // disable the submit button to prevent repeated clicks
                $('#stripe-submit').attr("disabled", "disabled");

                // send the card details to Stripe
                Stripe.createToken({
                    name: $('#name').val(),
                    number: $('#card-number').val(),
                    exp_month: $('select[name="card-month"]').val(),
                    exp_year: $('select[name="card-year"]').val(),
                    cvc: $('#card-cvc').val()
                }, stripeResponseHandler);

                // prevent the form from submitting the default action
                return false;
            });
        }
    }
};

Stripe.setPublishableKey(stripe_vars.publishable_key);

function stripeResponseHandler(status, response) {
    if (response.error) {
        // show errors returned by Stripe
        jQuery(".payment-errors").html(response.error.message);
        // re-enable the submit button
        jQuery('#stripe-submit').attr("disabled", false);
    } else {
        var form$ = jQuery("#payment-form");
        // token contains id, last4, and card type
        var token = response['id'];
        // insert the token into the form so it gets submitted to the server
        form$.append("<input type='hidden' name='stripeToken' value='" + token + "'/>");
        // and submit
        form$.get(0).submit();
    }
}

jQuery(document).ready(function($) {
    $('#stripe-submit').click(function (){
        oeValidate.errors = false;
        oeValidate.name();
        oeValidate.sendIt();
        return false;
    });
});
4

2 に答える 2

7

理解した。サブミット機能をメソッドとして持つ必要はありませんでした。

$('#payment-form').submit(function(event){
    // validate fields
    oeValidate.errors = false;
    oeValidate.name();

    // send the card details to Stripe
    if(!oeValidate.errors){
        // disable the submit button to prevent repeated clicks
        $('#stripe-submit').attr("disabled", "disabled");

        Stripe.createToken({
            name: $('#name').val(),
            number: $('#card-number').val(),
            exp_month: $('select[name="card-month"]').val(),
            exp_year: $('select[name="card-year"]').val(),
            cvc: $('#card-cvc').val()
        }, stripeResponseHandler);
    }

    // prevent the form from submitting the default action
    return false;
});
于 2013-07-10T17:47:19.047 に答える
1

使用する必要があるとします

Stripe.createToken($(this), stripeResponseHandler);

つまり、最初のパラメーターはフォームオブジェクトでなければならず、フォームには指定されたフィールドが含まれている必要がありますが、作成しようとしているオブジェクトは含まれていません

次にresponse、この情報が含まれます

このドキュメントを確認してください

于 2013-07-10T15:19:55.073 に答える