Foros del Web » Programando para Internet » Javascript »

Mostrar variable fuera de una funcion

Estas en el tema de Mostrar variable fuera de una funcion en el foro de Javascript en Foros del Web. Hola que tal, bien les cuento, tengo un código que detecta si dentro de un div, existen imágenes o videos desde youtube o vimeo, y ...
  #1 (permalink)  
Antiguo 22/11/2013, 07:45
 
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 11 años, 4 meses
Puntos: 2
Exclamación Mostrar variable fuera de una funcion

Hola que tal, bien les cuento, tengo un código que detecta si dentro de un div, existen imágenes o videos desde youtube o vimeo, y luego de hacer todo el análisis muestra el resultado en una variable llamada multimedia.

El tema es que debo asignarle el valor de multimedia a otra variable que está fuera de la funcion.

Podría hacer todo sin una función, pero no resulta porque con la instrucción document.ready hago que el dom se cargue completo antes de hacer la búsqueda de los elementos, de lo contrario siempre me dice que multimedia está vacío, pero es ahí mi problema, al estar var multimedia dentro de la función, no logro externalizarla para asignarle su valor a otra variable que tengo.

Les dejo el código


Código:
	var j = jQuery.noConflict();
	var iframe = new Boolean;

	//detecta si la src del iframe contiene las palabras youtube o vimeo
	j(document).ready(function(){


		var vids = j('.col-ps iframe');
		var urlIframe = j('.col-ps iframe').attr('src');
		var regexxx = new RegExp("^.*"+ 'youtube|vimeo' +".*","gi");

		if ( (vids != null) && (vids.length) ) {

			if(urlIframe.match(regexxx)){

			  var iframe = true;
			}else{
				 var iframe = false;
			}

		  //else del primer if  
		}else{
			var iframe = false; 
		}


		var imgs = j('.col-ps img');


		if ((imgs != null && imgs.length) && (imgs.width() > 250) && (vids != null && vids.length) && (iframe == true) ){

			var multimedia = ('foto/video');

		}else if (imgs != null && imgs.length && (imgs.width() > 250) ) {

			 var multimedia = ('foto');


		} else if (vids != null && vids.length && iframe == true) {

			var multimedia = ('video');
		
		}else{
			var multimedia = ("sin multimedia");
		}
			
	});

Lo que necesito es tomar el valor de la var multimedia por ejemplo a la variable dato1, es decir dejar algo así en otro script.

Código:
var dato1 = multimedia;
alert(dato1);
Espero se entienda y puedan ayudarme, por más que busco y pruebo no logro encontrar la solución.

De antemano gracias, saludos.

Última edición por headbanger1986; 22/11/2013 a las 07:46 Razón: Faltó texto
  #2 (permalink)  
Antiguo 22/11/2013, 08:14
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Mostrar variable fuera de una funcion

Hay varias formas. Una es definir la variable fuera de la función:

Código:
var multimedia;
Luego asociarle un valor dentro de la función u otro contexto, justo como lo haces pero sin el var:

Código:
multimedia = ('foto/video');
Y como ya es global puedes acceder con window:

Código:
var dato1 = window.multimedia; 
alert(dato1);
Saludos
  #3 (permalink)  
Antiguo 22/11/2013, 09:20
 
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Mostrar variable fuera de una funcion

Gracias PHPeros, sin embargo no logro que esto de resultados, sigo sin poder externalizar la variable fuera del $(document).ready(function(){ multimedia });

Aún cuando la declaro antes de la función, me dice que multimedia no está definido.

Cualquier dato será bienvenido, muchas gracias.
  #4 (permalink)  
Antiguo 22/11/2013, 09:31
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Mostrar variable fuera de una funcion

Para que lo que PHPeros funcione la variable debes declararla por fuera de cualquier función. Lee sobre scope en javascript. De verdad lo necesitas.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 22/11/2013, 09:36
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Mostrar variable fuera de una funcion

O establecerla como propiedad del window:

Código:
window.multimedia = ('foto/video');
  #6 (permalink)  
Antiguo 22/11/2013, 09:40
 
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Mostrar variable fuera de una funcion

Cita:
Iniciado por jonni09lo Ver Mensaje
Para que lo que PHPeros funcione la variable debes declararla por fuera de cualquier función. Lee sobre [URL="http://www.quizzpot.com/courses/aprendiendo-ext-js-3/articles/que-es-el-scope-o-alcance-de-una-variable"]scope en javascript[/URL]. De verdad lo necesitas.

Saludos
Claro, así lo he hecho, sin embargo no logro que funcione.

Leeré lo que me envías para ver si logro entender como funciona el tema. Muchas gracias.
  #7 (permalink)  
Antiguo 22/11/2013, 10:25
 
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Mostrar variable fuera de una funcion

Muchas gracias jonni09lo , ahora logro entender mucho mejor como funciona el scope. Ahora, hice una prueba tal como sale en el video y funciona todo perfecto, sin embargo nuevamente el document.ready me da problemas.

Por ejemplo

Código:
$(document).ready(function testing2(){  

/*function testing2(){*/
	

	FDW = "soy una variable dentro de una funcion, pero soy global";
    
 });

//}

testing2();

alert(FDW);

Si uno hace correr el script dentro de una funcion normal, todo va bien, pero si se hace correr dentro del document.ready, dice que la funcion no está definida.

Última edición por headbanger1986; 22/11/2013 a las 10:33
  #8 (permalink)  
Antiguo 22/11/2013, 10:36
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Mostrar variable fuera de una funcion

Cita:
$(document).ready(function testing2(){
Bien, vemos que tienes problemas bastante serios... Te recomiendo leer manuales.

Cita:
FDW = "soy una variable dentro de una funcion, pero soy global";
No. no eres una variable, formas parte del objeto window.
  #9 (permalink)  
Antiguo 22/11/2013, 11:36
 
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Mostrar variable fuera de una funcion

Gracias estimados, seguiré investigando sobre el tema.

Saludos.
  #10 (permalink)  
Antiguo 22/11/2013, 14:51
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Mostrar variable fuera de una funcion

1º:

Ten en cuenta que las variables, funciones, ... que definas tiene un scope. El scope en javascript es a nivel de función.

Ejemplo:

Código Javascript:
Ver original
  1. var f_Scope2;
  2.  
  3. function Scope1()
  4. {    
  5.     f_Scope2 = function Scope2()
  6.     {
  7.         alert("Sólo puedo ser llamada desde la función Scope1, excepto que desde si soy referenciada por una closure");
  8.     }
  9. }
  10.  
  11. Scope1();
  12. f_Scope2();
  13. Scope2();

La función Scope2 sólo puede ser llamada dentro de la función Scope1, a no ser que tengas una referencia a la función por una variable que esté en un scope superior (como es el caso de guardar la función Scope2 en la variable f_Scope2). Esto último es lo que se llama closure (es algo que puede costar un poco entender, pero puedes investigar más en Internet).

2º:

Código Javascript:
Ver original
  1. $(document).ready(function testing2(){  
  2.  
  3. /*function testing2(){*/
  4.    
  5.  
  6.     FDW = "soy una variable dentro de una funcion, pero soy global";
  7.    
  8.  });
  9.  
  10. //}
  11.  
  12. //Esta función no es accesible porque está en un scope más interno, sólo podrías usarla dentro de la función ready (llamándola recursivamente)
  13. testing2();
  14.  
  15. //Da error puesto que no está declarada, dado que no se ha ejecutado todavía la función ready (se ejecuta cuando se carga la página (no tiene que haber cargado imágenes)). Esta variable sólo puede ser usada dentro de la función ready y funciones que se llamen desde esta.
  16. alert(FDW);

Ejemplo de lo último que digo:


Código Javascript:
Ver original
  1. $(document).ready(function testing2()
  2.                   {
  3.                       FDW = "soy una variable dentro de una funcion, pero soy global";
  4.                       //Ahora si puedo
  5.                       MostrarFDW();
  6.                      
  7.                   });
  8.  
  9. function MostrarFDW()
  10. {
  11.     alert(FDW);
  12. }
  13.  
  14. //Error al ejecutar, porque no está declarada la variable FDW
  15. //MostrarFDW();

Espero que te sirva de algo, pero es recomendable que mires algo por tu cuenta para aprender más sobre estos casos.
  #11 (permalink)  
Antiguo 25/11/2013, 08:42
 
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Mostrar variable fuera de una funcion

Muchas gracias alexg88, me resulta muy útil la información. Claramente aún me falta aprender más sobre el tema, pero estoy en ello.

Saludos.
  #12 (permalink)  
Antiguo 26/11/2013, 07:02
 
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Mostrar variable fuera de una funcion

Bien, he logrado externalizar la variable, lo extraño es que cuando se la asigno a la otra variable, veo resultados positivos con un alert o un console.log o llamándola directamente por el nombre desde la consola del navegador, pero en el software que debe detectar la variable no la toma.

Y lo extraño es que probé la misma fórmula en otra variable que tampoco me funcionaba y dio resultado, claro que esta última no tiene un document.ready, es la única diferencia, quizás sea por eso.

Les dejo como está actualmente:

Código:
	var j = jQuery.noConflict();
	var iframe = new Boolean;

 j(document).ready(function() {

	var vids = j('.col-ps iframe');
	var urlIframe = vids.attr('src');
	var regexxx = new RegExp("^.*"+ 'youtube|vimeo' +".*","gi"); //detecta si la src del iframe contiene las palabras youtube o vimeo
	var imgs = j('.col-ps img');

	if ( (vids != null) && (vids.length) ) {

		if(urlIframe.match(regexxx)){

		  var iframe = true;
		}else{
			 var iframe = false;
		}

	  //else del primer if  
	}else{
		var iframe = false; 
	}


	//IF
	if ((imgs != null && imgs.length) && (imgs.width() > 250) && (vids != null && vids.length) && (iframe == true) ){

		multimedia = ('foto/video');

	}else if (imgs != null && imgs.length && (imgs.width() > 250) ) {

		multimedia = ('foto');

	} else if (vids != null && vids.length && iframe == true) {

		multimedia = ('video');
	
	}else{
		multimedia = ("");
	}

	 mmedia();

});
y en la parte de las variables

Código:
function mmedia(){

		s.prop30=multimedia;
	}
No sé que pueda ser, pero por lo menos pasé el primer obstáculo.

Cualquier dato es bienvenido, desde ya muchas gracias.

Etiquetas: function, jquery
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 08:08.