问题:jQuery 代码不触发“update_checkout”。
我在订单审查表上添加了一个自定义选择字段,供客户选择小费金额,如下所示:
我想在选择值更改时触发 update_checkout,但它没有发生。如果我选择送货方式,它会触发“update_checkout”并正确更新金额百分比。
HTML:
<tr class="propina">
<th id="propina_field">Propina</th>
<td>
<span class="woocommerce-input-wrapper">
<select name="propina" id="propina" class="select" data-placeholder="">
<option value="0">0</option>
<option value="1">1%</option>
<option value="2">2%</option>
<option value="3">3%</option>
<option value="5">5%</option>
<option value="7">7%</option>
<option selected value="10">10%</option>
</select>
</span>
</td>
</tr>
函数.php:
add_action( 'wp_head', 'woocommerce_tip' );
function woocommerce_tip() {
?>
<script type="text/javascript">
jQuery( document ).ready(function( $ ) {
$('#propina').change(function(){
jQuery('body').trigger('update_checkout');
});
});
</script>
<?php
}
最佳答案
已更新
为了像您的问题屏幕截图中那样测试您的代码,我使用了以下内容以在正确的位置显示相同的选择字段:
add_action('woocommerce_review_order_before_order_total', 'review_order_tip_line');
function review_order_tip_line() {
?>
<tr class="propina"><th id="propina_field">Propina</th><td><span class="woocommerce-input-wrapper">
<select name="propina" id="propina" class="select" data-placeholder="">
<option value="0">0</option>
<option value="1">1%</option>
<option value="2">2%</option>
<option value="3">3%</option>
<option value="5">5%</option>
<option value="7">7%</option>
<option selected value="10">10%</option>
</select>
</td></span></tr>
<?php
}
然后这是您重新访问的 jQuery 代码:
add_action( 'wp_footer', 'woocommerce_tip_script' );
function woocommerce_tip_script() {
// Only on checkout page
if( ! is_checkout() ) return;
?>
<script type="text/javascript">
jQuery(function($){
// On 'select#propina' change (live event)
$('form.woocommerce-checkout').on( 'change', 'select#propina', function(){
// Set the select value in a variable
var a = $(this).val();
// Update checkout event
$('body').trigger('update_checkout');
// Restoring the chosen option value
$('select#propina option[value='+a+']').prop('selected', true);
// Just for testing (To be removed)
console.log('trigger "update_checkout"');
// Once checkout has been updated
$('body').on('updated_checkout', function(){
// Restoring the chosen option value
$('select#propina option[value='+a+']').prop('selected', true);
// Just for testing (To be removed)
console.log('"updated_checkout" event, restore selected option value: '+a);
});
});
})
</script>
<?php
}
代码进入事件子主题(或事件主题)的 function.php 文件。测试和工作。
关于php - 在 Woocommerce 中使用自定义选择字段触发 update_checkout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52068606/