Entonces, esto es lo que estoy tratando de hacer: quiero que cada vez que el usuario seleccione una opción diferente en 'seleccionar', se active una función diferente. Cada 'opción seleccionada:' tiene una función diferente. Podría ser más fácil de entender con el siguiente código:

$('.edd-variable-pricing-switcher').change(function() {
        if($(this).val() == 1) {
            $('.chackout-licence-private').css('display', 'block');
        }
        else {
            $('.chackout-licence-private').css('display', 'none');
        }

    if(e.originalEvent) {
        window.location.reload(true);
    }
}).change();

Ahora funciona, cuando elijo la opción con el valor '1' en mi selección (select class = ". Edd-variable-pricing-switcher"), aparece el div con la clase ".chackout-license-private" bloquear. Mi problema es que la página nunca deja de recargarse. cuando activo el evento de cambio al final, provoca una recarga de página sin fin, pero sin activar el evento de cambio, después de que la página se recarga, los cambios ya no existirían.

La solución que estoy tratando de buscar es cómo puedo activar el evento de cambio después de que la página se recarga solo una vez, para que la página no se vuelva a cargar en una especie de bucle.

Gracias

EDIT

Estoy agregando algo del código .. 1. Este es el html que estoy tratando de afectar y mostrar (normalmente es display: none):

<div class="chackout-licence">
    <div class="chackout-licence-private">
        <h3>Private Licence</h3>
            <p>
            A single track licence for online entertainment video....
            </p>
  </div><!--chackout-licence-private-->
  1. La parte de código de selección y opción es de un complemento, por lo que estoy agregando una imagen del elemento de inspección: ingrese la descripción de la imagen aquí

  2. explicación: estoy tratando de crear un precio variable para un producto, por lo que en la caja, el usuario podría decidir con qué licencia comprará el producto. por lo que elige una opción de la selección, y luego cada opción muestra una descripción diferente sobre cada licencia.

0
yoD 25 feb. 2018 a las 02:50

2 respuestas

La mejor respuesta

¿Cómo puedo activar el evento de cambio después de que la página se recarga solo una vez, para que la página no se vuelva a cargar en una especie de bucle?

[EDITAR] Creo que este funcionaría:

jQuery( function( $ ) {
    /**
     * Hides (default) or shows an element.
     *
     * @param s    mixed A DOM selector. E.g. .my-class or #my-unique-id
     * @param show bool  If TRUE, shows the element. Otherwise, hides it.
     * @return object The target element.
     */
    function toggleDisplay( s, show ) {
        if ( show ) {
            return $( s ).show();
        } else {
            return $( s ).hide();
        }
    }

    /*
     * You may also instead target the SELECT's "name" value. I.e.
     * $( 'select[name="edd-variable-pricing-switcher[60]"]' )
     */
    $( 'select.edd-variable-pricing-switcher' ).each( function() {
        // Saves the default value. (on-page cache)
        $( this ).data( '_defaultValue', this.value );

        // When the value changes, reloads the page.
        $( this ).on( 'change', function() {
            var _defaultValue = $( this ).data( '_defaultValue' );

            // Invalid value.
            if ( ! this.value ) {
                // Hides .chackout-licence-private
                toggleDisplay( '.chackout-licence-private' );
            }
            // It's the default value. ("no" changes)
            else if ( this.value === _defaultValue ) {
                /*
                 * Shows .chackout-licence-private, if value is 1; otherwise,
                 * hides it.
                 */
                toggleDisplay( '.chackout-licence-private', '1' === this.value );
            }
            // It's a valid new value.
            else {
                // The TRUE below - are you 100% sure you want to force reload?
                window.location.reload( true );
            }
        } );

        /*
         * When the page loads (i.e. first load or after a reload), shows/hides
         * the appropriate DIV. In this case, we show .chackout-licence-private
         * if value is 1; otherwise, hides it.
         */
        toggleDisplay( '.chackout-licence-private', '1' === this.value );
    } );
} );
1
Sally CJ 28 feb. 2018 a las 07:50

Bueno, está rastreando un evento de cambio, haciendo algo en esa función pero justo después de que está activando el evento de cambio nuevamente.

$('.edd-variable-pricing-switcher').change(function() { ... }).change(); es su código. El último .change() desencadena otro cambio, por lo que se repite.

Simplemente elimina la última .change() así

$('.edd-variable-pricing-switcher').change(function() {...});

0
Ovidiu 25 feb. 2018 a las 06:22