1

Tengo una función que se está llamando en un evento click y tiene definida un parametro $container

Estoy intentado parar el proceso de esa función, abrir un modal que tiene un botón de guardar y luego seguir con la función original pasandole al evento click el parámetro $container.

Tengo el siguiente código pero no me funciona del todo bien, les explico mejor en el comentario del código.

gm.addEditableAreaClick = function (container) {
        $("#myModal").modal();
        console.log(container); 
//aquí el container cambia cada vez que hago click

        $('.save-module').on("click", {param: container}, function(event){
            console.log(event.data.param); 
//aquí ya no cambia sino que se mantiene el que he clickado la primera vez y lo que me interesa es que cambie.

            $(('.' + gm.options.gmToolClass + ':last'), event.data.param)
                .before(elem = $('<div>').addClass(gm.options.gmEditRegion + ' ' + gm.options.contentDraggableClass)
                .append(gm.options.controlContentElem + '<div class="' + gm.options.gmContentRegion + '">[moz_module]module-id[/moz_module]</div>')).before(cTagClose).prev().before(cTagOpen);
            gm.initNewContentElem(elem);
        });
    };
Infobuscador
  • 462
  • 3
  • 12

2 Answers2

3

Sucede por que se forma una clausura, y el valor de container queda encerrado en la función.

Hay diferentes soluciones, la mas simple es remover el manejador existente, antes de establecer el nuevo manejador de on click.

$('.save-module').prop('onclick',null).off('click'); 
$('.save-module').on('click', // resto del código.

Luego vuelves a establecerlo y tendrá asignado el nuevo container.

rnrneverdies
  • 16,491
  • 3
  • 49
  • 79
0

Declarando container puedes usarla en todo el ambito de la función

gm.addEditableAreaClick = function (container) {
    var _container = container; // ** DECLARA CONTAINER
                $("#myModal").modal();
                console.log(container); 
        //aquí el container cambia cada vez que hago click

                $('.save-module').on("click", {param: container}, function(event){
                    console.log(_container);  // ** USAR CONTAINER
        //aquí ya no cambia sino que se mantiene el que he clickado la primera vez y lo que me interesa es que cambie.

                    $(('.' + gm.options.gmToolClass + ':last'), event.data.param)
                        .before(elem = $('<div>').addClass(gm.options.gmEditRegion + ' ' + gm.options.contentDraggableClass)
                        .append(gm.options.controlContentElem + '<div class="' + gm.options.gmContentRegion + '">[moz_module]module-id[/moz_module]</div>')).before(cTagClose).prev().before(cTagOpen);
                    gm.initNewContentElem(elem);
                });
            };

Debería funcionar, pruebalo

BlackSlash
  • 271
  • 1
  • 2