如果选择了特定的付款方式,Woocommerce只能运行javascript
作者:互联网
我为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,因为即使选中单选按钮,我的console.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中做到了
现在可以正常工作,但如果我的网关不是第一个选中的,那么“更改”功能仍然无效(当你从另一个网关切换到我的网关时).请帮忙.
解决方法:
尝试此操作以在付款方式选择上分配回拨
jQuery(function(){
jQuery( 'body' )
.on( 'updated_checkout', function() {
usingGateway();
jQuery('input[name="payment_method"]').change(function(){
console.log("payment method changed");
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");
}
}
标签:javascript,wordpress,woocommerce,wordpress-plugin,payment-gateway 来源: https://codeday.me/bug/20190829/1761206.html