2017-10-10 5 views
0

私は現在、dropinチェックアウトを介してSagePayを統合しています。私たちのサイトは、ユーザーがsagepayで支払いを選択できるようなものです。その場合、ドロップインチェックアウトをインスタンス化しますが、ページを更新せずにチェックアウトを削除/破棄する必要がある別の支払い方法に切り替えることができます。私は、ドキュメントごとにこれを実装しました:sagepayCheckoutでdestroy()メソッドを呼び出した後にイベントがまだ添付されています

sp = sagepayCheckout({ 
 
    merchantSessionKey: sagepaySessionKey 
 
}); 
 
sp.form();  
 

 
// and 
 

 
sp.destroy();

をしかし。 destroyメソッドを呼び出した後にチェックアウトフォームを送信しようとすると、sagepay-dropin.jsファイルの中にエラーが発生しています(下記参照)。ドキュメンテーションでは、destroy() "コンテナからiFrameを削除し、登録されている可能性のあるイベントの登録を解除します。"しかし、フォーム提出にはまだいくつかのイベントが添付されているようです。

あなたがこれを克服する方法を示唆することができるので、ユーザーがsagepayを選択してから別の支払い方法に切り替えると、チェックアウトフォームを送信することができます。ありがとう。

sagepay-dropin.js:11 Uncaught TypeError: Cannot read property 'postMessage' of null 
 
    at Object.a [as sendMessage] (sagepay-dropin.js:11) 
 
    at v (sagepay-dropin.js:11) 
 
    at T (sagepay-dropin.js:11) 
 
    at HTMLFormElement.<anonymous> (sagepay-dropin.js:11)

答えて

0

私は最後にこれを解決する方法を見つけました。匿名関数を介して追加されているため、dropinチェックアウトがフォームにバインドするイベントリスナーを削除する方法はありません。代わりに、以前のイベントリスナーを使用している支払方法をチェックするサブミットイベントにバインドしなければならず、sagepayでない場合はstopImmediatePropagation()を使用してsagepayイベントが発生しないようにしなければなりませんでした。

paymentForm.addEventListener("submit", function(e) { 
 
    if($("#paymenttype").val() != 9) { 
 
     e.stopImmediatePropagation(); 
 
    } 
 
});

関連する問題