2017-06-03 23 views
0

我已經創建了條紋的支付形式,需要爲了得到令牌可以提交自己的狀態之前,他們的API進行交互。所有事情都經過了Chrome的測試和工作,但昨天一位用戶表示它不適用於Safari。上beforeSubmit jQuery的不叫在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

你可以更改beforeSubmit提交和測試? – gaetanoM

+0

你爲什麼在提交之前打電話?只需使用上提交和發佈形式在stripeResponseHandler如果createToken呼叫全成 –

+0

@gaetanoM,我已經通過更換 $嘗試它,以及(「#付款形式」)。在(「beforeSubmit」,函數(事件) 與 $( '#付款形式')。提交(函數(事件) 也 $( '#付款形式')。在( '提交',函數(事件) 都具有相同的 – Fittersman

回答

0

好吧!所以解決方案實際上是我嘗試的幾件事情的組合。正如我對原帖的評論所說,我首先需要改用'submit'而不是'beforeSubmit'(我認爲這是一個Yii2特定的事情)。

但是,我不得不採取這一步。爲了實際工作,我還必須在事件上調用preventDefault()。

我也結束了從stripe.js v2進行遷移,而我是這個代碼瞎搞到V3,所以我不知道是否幫助或沒有得到很好的。

最終的解決方案來...

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

謝謝大家的幫助!