【发布时间】:2016-04-01 01:10:46
【问题描述】:
我为 Woocommerce 开发了一个支付网关插件,它严重依赖于一些加载弹出窗口以捕获用户详细信息的 javascript。仅当从单选按钮中选择了该网关时,我才需要运行该 javascript。由于某种原因,它不起作用。这是我的代码
jQuery(document).ready(function() {
usingGateway();
jQuery('form[name="checkout"] input[name="payment_method"]:checked').change(function(){
usingGateway();
});
});
function usingGateway(){
console.log(jQuery("input[name='payment_method']:checked").val());
if(jQuery('form[name="checkout"] input[name="payment_method"]:checked').val() == 'my_gateway'){
console.log("Using my gateway");
//Etc etc
}else{
console.log("Not using my gateway. Proceed as usual");
}
}
似乎 woocommerce 以某种方式覆盖了 javascript,因为即使选择了单选按钮,我用于 payment_method 的 console.log 始终未定义。然后跳过 IF 块,它总是说“不使用我的网关。当我注释掉 IF 语句时,支付网关工作正常。
但我需要它来工作,因为如果用户选择另一种付款方式(甚至是 BACS 或离线付款),javascript 仍将加载弹出窗口并尝试使用我的自定义网关处理付款。
更新:根据 rnevius 的评论,我检查了 woocommerce checkout.js 并将其从那里复制到我的插件 javascript 中:
var payment_methods = jQuery('.woocommerce-checkout').find( 'input[name="payment_method"]' );
if ( 0 === payment_methods.filter( ':checked' ).size() ) {
payment_methods.eq(0).attr( 'checked', 'checked' );
}
所以基本上如果没有检查任何内容,woocommerce 将强制检查第一项。不知道为什么我需要这样做,因为 woocommerce 已经在 checkout.js 中这样做了 现在可以了,但是如果我的网关还不是第一个选择的,“更改”功能仍然不起作用(当您从另一个网关更改为我的网关时)。请帮忙。
【问题讨论】:
-
了解一下付款方式更改后 WooCommerce 方面发生的情况可能会有所帮助:github.com/woothemes/woocommerce/blob/…
-
感谢 rnevius。但事情是这样的:即使在更改付款方式之前,当我的网关是默认网关(并且收音机已由 woocommerce 预先检查)时,它仍然显示为“未定义”。即使它是唯一的支付网关并且已经被选中,它也会显示为“未定义”。
-
用您的评论 rnevius 中的一些想法更新了帖子。
标签: javascript wordpress woocommerce payment-gateway