2017-10-10 93 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 checkout綁定到表單的事件偵聽器,因爲它們是通過匿名函數添加的。相反,我不得不將先前的事件偵聽器綁定到提交事件,該事件檢查正在使用的付款方式,如果它不是sagepay,它將使用stopImmediatePropagation()來防止sagepay事件觸發。

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

相關問題