Lösen Sie update_checkout mit einem benutzerdefinierten Auswahlfeld in Woocommerce aus

Lesezeit: 3 Minuten

Benutzer-Avatar
KronosL

Problem: Der jQuery-Code löst “update_checkout” nicht aus.

Ich habe ein benutzerdefiniertes Auswahlfeld in der Bestellübersichtstabelle hinzugefügt, damit Kunden den Trinkgeldbetrag wie gezeigt auswählen können:

Geben Sie hier die Bildbeschreibung ein

Ich möchte update_checkout auslösen, wenn dann Wertänderungen ausgewählt werden, aber es passiert nicht. Wenn ich die Versandmethode auswähle, wird “update_checkout” ausgelöst und der Betragsprozentsatz korrekt aktualisiert.

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>

Funktionen.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
}

  • Was ist die Frage? Oder das Problem?

    – LoicTheAztec

    29. August 2018 um 2:42 Uhr


  • Mein Fehler, aktualisierte Frage. Das Problem ist, dass jQuery-Code “update_checkout” nicht auslöst.

    – KronosL

    29. August 2018 um 2:54 Uhr

Benutzer-Avatar
LoicTheAztec

Aktualisiert

Um Ihren Code wie in Ihrem Frage-Screenshot zu testen, habe ich Folgendes verwendet, um dasselbe Auswahlfeld an der richtigen Stelle anzuzeigen:

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
}

Dann ist hier Ihr überarbeiteter jQuery-Code:

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
}

Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.

  • Danke, funktioniert wie am Schnürchen. Und vielen Dank, dass Sie auch den ausgewählten Wert wiederhergestellt haben, sehr hilfreich!

    – KronosL

    29. August 2018 um 17:40 Uhr

1245390cookie-checkLösen Sie update_checkout mit einem benutzerdefinierten Auswahlfeld in Woocommerce aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy