渲染JS/jQuery后如何触发打开PayPal支付弹窗?
先附上已实现的PayPal按钮渲染代码:
paypal_sdk.Buttons({ style: { layout: 'horizontal', color: 'gold', shape: 'rect', label: 'paypal', tagline: false }, createOrder: function (data, actions) { // 配置交易信息 return actions.order.create({ purchase_units: [{ amount: { value: '0.01' } }] }); }, onApprove: function (data, actions) { return actions.order.capture().then(function (details) { alert('交易已完成,付款人:' + details.payer.name.given_name + '!'); }); } }).render('#paypal-button-container').then(function () { });
问题:完成上述代码渲染PayPal按钮后,如何触发打开PayPal支付界面?
以下是对给出选项的分析:
选项1:
paypal_sdk.Buttons().show()
无效。每次调用paypal_sdk.Buttons()都会生成一个全新的按钮实例,而非你已渲染到页面的那个实例,且show方法并非用来触发支付界面的打开逻辑。选项2:
paypal_sdk.Buttons().click()
无效。同样是创建了新的按钮实例,这个实例并未挂载到DOM中,调用click不会对已渲染的按钮产生任何影响。选项3:
jQuery('#paypal-button-container button').trigger('click');
有效。PayPal按钮渲染完成后,会在指定的容器#paypal-button-container内生成实际的按钮元素,通过jQuery选中该按钮并触发点击事件,即可唤起PayPal支付界面。选项4:
document.querySelector('#paypal-button-container button').click();
有效。原理和选项3一致,使用原生JS选中容器内的PayPal按钮,调用click()方法触发点击,从而打开支付界面。选项5:
document.querySelector('#paypal-button-container').click();
无效。直接点击容器元素不会触发内部按钮的点击事件(PayPal默认未给容器绑定这类委托事件),无法唤起支付界面。
综上,选项3和选项4是可行的实现方式。
内容的提问来源于stack exchange,提问作者Михаил Солонина

