2017-06-03 10 views
0

フォームを送信する前にトークンを取得するために、APIとやりとりする必要があるStripeで支払いフォームを作成しました。 Chromeですべてのテストと作業が行われていましたが、昨日、ユーザーはSafariで作業していないと言っていました。jquery on 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

あなたは前に変更することができます提出とテストと提出? – gaetanoM

+0

なぜあなたは前に電話していますか? submitTokenの呼び出しが成功した場合は、submiteを使用してstripeResponseHandlerにフォームを投稿してください。 –

+0

@gaetanoM、私は $( '#payment-form')を置き換えて試しました。( 'beforeSubmit'、function(event $付き) ( '#支払いフォーム')。提出(関数(イベント) とも $( '#支払いフォーム')。(、関数(イベント) 両方が同じを持って '提出' に関する結果は – Fittersman

答えて

0

大丈夫です!だから、解決策は実際に私が試していたいくつかのものの組み合わせでした。私の元の記事へのコメントが述べるように、私はまずbeforeSubmitではなく 'submit'を使うように変更する必要がありました(これはYii2固有のものだと思います)。

しかし、私はその一歩をさらに進めなければなりませんでした。実際に動作させるためには、イベントでpreventDefault()を呼び出さなければなりませんでした。

私もこのコードを使いこなしている間にstripe.js v2からv3に移行してしまったので、それが役立つかどうかはわかりません。

最終的な解決策がするようになりました...

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

ヘルプみんなありがとう!

関連する問題