我目前正通过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;
答案 0 :(得分:0)
我找到了解决这个问题的方法。由于它们是通过匿名函数添加的,因此无法删除dropin checkout绑定到表单的事件侦听器。相反,我必须将一个早期的事件监听器绑定到提交事件,该事件检查正在使用的支付方法,如果它不是sagepay,它使用stopImmediatePropagation()来防止sagepay事件被触发。
paymentForm.addEventListener("submit", function(e) {
if($("#paymenttype").val() != 9) {
e.stopImmediatePropagation();
}
});