Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Llama a variables dentro de una funcion

Estas en el tema de Llama a variables dentro de una funcion en el foro de Javascript en Foros del Web. Saludos. Llevo intentando resolver una duda que a priori no debería de tener problemas;llamar a dos variables que se encuentran dentro de una función,sin embargo ...
  #1 (permalink)  
Antiguo 14/05/2015, 11:45
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años
Puntos: 0
Pregunta Llama a variables dentro de una funcion

Saludos. Llevo intentando resolver una duda que a priori no debería de tener problemas;llamar a dos variables que se encuentran dentro de una función,sin embargo y especificando mejor el titulo del tema, se complica debido a la siguiente situación:

Código:
var results = new L.LayerGroup().addTo(map);       
        
        searchControl.on("results", function (data) {
            results.clearLayers();
            for (var i = data.results.length - 1; i >= 0; i--) {
                results.addLayer(L.marker(data.results[i].latlng));
                coorx = data.results[i].latlng.lat;//Variable a llamar
                coory = data.results[i].latlng.lng; //Variable a llamar
            };
});
alert(coorx);//No funciona
He intentado todo tipo de llamadas desde otra función pero en el contexto donde se encuentra la función me ha sido imposible.
Muchas gracias.
  #2 (permalink)  
Antiguo 14/05/2015, 12:22
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Llama a variables dentro de una funcion

¿Estás intentando mostrar el valor de coorx antes de ejecutar la función? Porque, si es así, es lógico que no tenga valor alguno.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 14/05/2015, 13:06
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años
Puntos: 0
Respuesta: Llama a variables dentro de una funcion

Saludos. Gracias por contestar.
Al declarar dichas variables sin usar 'var' ,las he intentado pasar como globales y así poder llamarlas desde cualquier línea del programa. Para comprobar si esa acción era posible use alert. Sin embargo no parecen haber sido pasadas como globales. El objetivo es usar coorx y coory en otra función posterior.
  #4 (permalink)  
Antiguo 14/05/2015, 13:07
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Llama a variables dentro de una funcion

No lo entendiste bien.

No se pueden declarar variables globales o no, si no se invoca el manejador asociado al evento antes. Es como si haces:

Código Javascript:
Ver original
  1. window.onclick = function(){
  2.    alert();
  3. }

¿Se ejecutará el alert en la ejecución del código?
  #5 (permalink)  
Antiguo 14/05/2015, 13:13
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años
Puntos: 0
Respuesta: Llama a variables dentro de una funcion

De acuerdo,y como se haría para éste caso?,la cuestión es debido a mis limitados conocimientos al respecto. Gracias
  #6 (permalink)  
Antiguo 14/05/2015, 13:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Llama a variables dentro de una funcion

¿Y qué tal si pruebas mostrando el mensaje de alerta luego de ejecutar la función y —por ende— asignar el valor a la variable en cuestión?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 14/05/2015, 13:51
Avatar de Nopal_Studio  
Fecha de Ingreso: julio-2012
Ubicación: DF
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 10
Respuesta: Llama a variables dentro de una funcion

Intentalo así:

Código Javascript:
Ver original
  1. var results = new L.LayerGroup().addTo(map);      
  2.        
  3.         searchControl.on("results", function (data) {
  4.             results.clearLayers();
  5.             for (var i = data.results.length - 1; i >= 0; i--) {
  6.                 results.addLayer(L.marker(data.results[i].latlng));
  7.                 coorx = data.results[i].latlng.lat;//Variable a llamar
  8.                 coory = data.results[i].latlng.lng; //Variable a llamar
  9.             };
  10.             alert(coorx);//No funciona
  11. });
  #8 (permalink)  
Antiguo 14/05/2015, 14:01
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años
Puntos: 0
Respuesta: Llama a variables dentro de una funcion

De acuerdo. Probaré la sugerencia. Con el editor me daba error de sintaxis y no he llegado a ejecutarlo. Les comento el resultado.
Muchas gracias.
  #9 (permalink)  
Antiguo 14/05/2015, 18:16
Avatar de pr0x  
Fecha de Ingreso: mayo-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
De acuerdo Respuesta: Llama a variables dentro de una funcion

Código:
    var results = new L.LayerGroup().addTo(map);      
           
            searchControl.on("results", function (data) {
                results.clearLayers();
                for (var i = data.results.length - 1; i >= 0; i--) {
                    results.addLayer(L.marker(data.results[i].latlng));
                    coorx = data.results[i].latlng.lat;//Variable a llamar
                    coory = data.results[i].latlng.lng; //Variable a llamar
                };
    });
     alert(coorx);//No funciona
Tu problema radica en el tiempo de vida de la variable coorx aunque es globlal esta no existe en nivel donde la colocas ya que la inicializas cuando se dispare el evento results.
Es por eso que si la quieres mostrar la deves porner dentro de la funcion que se ejecuta cuando se dispara el evento que es la solución que te dan. dentro de la func anonima:
Código:
...
   searchControl.on("results", function (data) {
     results.clearLayers();
     for (var i = data.results.length - 1; i >= 0; i--) {
           results.addLayer(L.marker(data.results[i].latlng));
                    coorx = data.results[i].latlng.lat;//Variable a llamar
                    coory = data.results[i].latlng.lng; //Variable a llamar
      };
      alert(coorx); //aki es don vas
      //puedes desfinir una funcion fuera y llamarla para desacoplar
      //mejor el codigo ej: logica_mycode(coorx)
    }
  #10 (permalink)  
Antiguo 15/05/2015, 02:56
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años
Puntos: 0
Respuesta: Llama a variables dentro de una funcion

Buenos días. Gracias por las sugerencias de soluciones planteadas.
He probado la opción enviada:

Código:
   var results = new L.LayerGroup().addTo(map);      
           
            searchControl.on("results", function (data) {
                results.clearLayers();
                for (var i = data.results.length - 1; i >= 0; i--) {
                    results.addLayer(L.marker(data.results[i].latlng));
                    coorx = data.results[i].latlng.lat;//Variable a llamar
                    coory = data.results[i].latlng.lng; //Variable a llamar
                };
    }
alert(coorx);//No funciona
);
,sin embargo no se ejecuta el código completo debido a un error de sintaxis. Sólo admitiría opciones de la función separadas por ',' pero creo que no eventos ya que al probar :
Código:
};
    },
alert(coorx);//No funciona
);
, no funciona.

- La otra opción planteada:

Código:
var results = new L.LayerGroup().addTo(map);

        searchControl.on("results", function (data) {
            results.clearLayers();
            for (var i = data.results.length - 1; i >= 0; i--) {
                results.addLayer(L.marker(data.results[i].latlng));
                coorx = data.results[i].latlng.lat;//Variable a llamar
                coory = data.results[i].latlng.lng; //Variable a llamar
            };
            //alert(coorx); //aki es don vas
            //puedes desfinir una funcion fuera y llamarla para desacoplar
            //mejor el codigo ej: logica_mycode(coorx)
            logica_mycode(coorx,coory);
        }

        );
        function logica_mycode(coorx, coory) {
            var geocodeService = new L.esri.Geocoding.Services.Geocoding();
            alert(coorx);
            geocodeService.reverse().latlng([coorx,coory]).run(function (error, result) {
                    dir = result.address.Match_addr;//Variable tipo String
          });               
        };
,no ejecuta la función logica_mycode(coorx,coory). Desconozco si estoy procediendo correctamente conforme a la sugerencia.
  #11 (permalink)  
Antiguo 15/05/2015, 09:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Llama a variables dentro de una funcion

El mensaje de alerta debes de ejecutarlo después del bucle y antes de cerrar la función. Tienes que fijarte bien.

Por cierto, dentro del bucle, lo único que haces es asignar y reemplazar valores a las mismas variables, por lo que al final solo te quedarás con el valor final. En lugar de eso, mejor toma directamente el valor final de data.results y asigna los valores a las variables.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #12 (permalink)  
Antiguo 15/05/2015, 09:54
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años
Puntos: 0
Respuesta: Llama a variables dentro de una funcion

Saludos.En primer lugar agradeceros las soluciones propuestas. Respecto a la asignación y reemplazo en las variables se debe a que debido al uso de determinadas librerias, en el mapa me aparecen todos los resultados obtenidos por el Geocodificador por lo que he tenido que adaptarlo para que me facilite un único valor. Finalmente y gracias a vuestros consejos se ha podido solucionar usando para ello una función con su correspondiente llamada dentro de la función previa:

Código:
var results = new L.LayerGroup().addTo(map);

        searchControl.on("results", function (data) {
            results.clearLayers();
            //for (var i = data.results.length - 1; i >= 0; i--) {
                results.addLayer(L.marker(data.results[0].latlng));
                coorx = data.results[0].latlng.lat;//Variable a llamar
                coory = data.results[0].latlng.lng; //Variable a llamar
            //};
            //alert(coorx); //aki es don vas
            //puedes desfinir una funcion fuera y llamarla para desacoplar
            //mejor el codigo ej: logica_mycode(coorx)               
                logica_mycode(coorx, coory);
                
        });

function logica_mycode(coorx, coory) {           
            alert(coorx); 
            alert(coory);        
        };
Un saludo.

Etiquetas: javascript+html, javascript-funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:37.