php - 在 Woocommerce 中使用自定义选择字段触发 update_checkout

标签 php jquery wordpress woocommerce checkout

问题:jQuery 代码不触发“update_checkout”。

我在订单审查表上添加了一个自定义选择字段,供客户选择小费金额,如下所示:

enter image description here

我想在选择值更改时触发 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/

相关文章:

php - 用于验证 Active Directory 对象 SID 的正则表达式

javascript - 如何延迟元素上的默认浏览器滚动?

javascript - 针对容器 div 初始化 WaveSurfer

wordpress - 在 WordPress 的 URL 中包含 & 符号

php - WordPress 类别侧边栏

php - 与命令相关的 Mysql 表行中的文本搜索和删除/更新(如果存在)

php - Codeigniter php 上的数据库错误

PHP - 将 HTTPS 重定向到 HTTP - 无限循环

javascript - jQuery 可排序不适用于多个容器

html - 你如何覆盖 html { min-width : 1200px } on wordpress?