在sagepayCheckout上调用destroy()方法后仍然附加事件

时间:2017-10-10 16:09:21

标签: javascript sagepay

我目前正通过dropin checkout整合SagePay。我们的网站是这样的,用户可以选择通过sagepay付款,在这种情况下,我们实例化插入结帐,但然后可以切换到另一种付款方式,要求我们删除/销毁结帐而不刷新页面。我按照文档实现了这个:



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

// and

sp.destroy();




然而。一旦我们在调用destroy方法后尝试提交checkout表单,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)
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。由于它们是通过匿名函数添加的,因此无法删除dropin checkout绑定到表单的事件侦听器。相反,我必须将一个早期的事件监听器绑定到提交事件,该事件检查正在使用的支付方法,如果它不是sagepay,它使用stopImmediatePropagation()来防止sagepay事件被触发。

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