• Acciones con parámetros recibidos en function JS

 #281349  por Z3R0N3
 28 Mar 2011, 18:17
Muy buenas señores, tengo una consulta que hacerles ya que no se como tratar lo siguiente:

Supongamos que tengo un listado de Archivos y Videos, éstos son mostrados mediante un FOR en PHP para los Archivos, y otro FOR para los videos, imprimiendo por ejemplo el siguiente TAG para cada elemento: (obviamente voy a reducir el codigo para que les sea mas agradable a la vista)

VIDEO 1
Código: [ Debe registrarse para ver este enlace ]
<input onclick="return confirmar('VIDEOS/webflv1301323145652.flv', '0');">
VIDEO 2
Código: [ Debe registrarse para ver este enlace ]
<input onclick="return confirmar('VIDEOS/webflv2345652.flv', '1');">

ARCHIVO 1
Código: [ Debe registrarse para ver este enlace ]
<input onclick="return confirmar('ARCHIVOS/imagen.jpg', '0');">

ARCHIVO 2
Código: [ Debe registrarse para ver este enlace ]
<input onclick="return confirmar('ARCHIVOS/imagen2.jpg', '1');">


Bien, como pueden observar simplemente son botones que al pulsarlos llaman a la función "confirmar()" de JS pasandole 2 parámetros "confirmar( ruta, id )"


Bueno llegando a la conclusión del problema, todo funciona correcto solo que antes lo hacía solo con ARCHIVOS y no con VIDEOS, algo que siempre ha ido bien y al implementar el FOR de los videos ya se ha fastidiado.


El Code JS "ANTIGUO" recibía los parámetros así:
Código: [ Debe registrarse para ver este enlace ]
function confirmar(archivoEliminar, i)
{
  if(confirm('¿Realmente desea eliminar el archivo por completo? \n\n NOTA :: El archivo dejará de existir para siempre.')) 
  {
    conexion=HttpRequest();
    conexion.onreadystatechange = dibujar;
    conexion.open('POST','?'+location.search.substring(1), true);
    conexion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    conexion.send("&dato="+archivoEliminar);

  } else {
	conexion='';
  }


como pueden observar la función recibe las 2 variables que corresponden a confirmar( ruta, id ) o bien, confirmar( archivoEliminar, i )

Al querer implementar los videos quedaría confirmar( videoEliminar, v )


Obviamente aquí está el problema, nose como tratar cada cosa por separado, quiero hacer algo así: (Ya sé que está mal... :@)


JS NUEVO:
Código: [ Debe registrarse para ver este enlace ]
function confirmar(archivoEliminar, i, videoEliminar, v)
{
  if(confirm('¿Realmente desea eliminar el archivo por completo? \n\n NOTA :: El archivo dejará de existir para siempre.')) 
  {
    conexion=HttpRequest();
    conexion.onreadystatechange = dibujar;
    conexion.open('POST','?'+location.search.substring(1), true);
    conexion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    if (i) { conexion.send("&dato="+archivoEliminar); }
	if (v) { conexion.send("&dato="+videoEliminar); }

  } else {
	conexion='';
  }

Como pueden observar, intento capturar
Código: [ Debe registrarse para ver este enlace ]
function confirmar(archivoEliminar, i, videoEliminar, v)
y más abajo ven ésto:
Código: [ Debe registrarse para ver este enlace ]
if (i) { conexion.send("&dato="+archivoEliminar); }
	if (v) { conexion.send("&dato="+videoEliminar); }

Lo que quiero hacer es que en función de que haya invocado " i " o " v " haga una cosa u otra.


Espero que me entiendan sino no duden en preguntar. Gracias nuevamente y espero sus respuestas. Salu2
 #281384  por linkgl
 28 Mar 2011, 20:23
No tengo mucho tiempo tengo clases en media hora pero así rápidamente:

No puedes dejar parametros sin pasar, tienes que pasar los 4 a fuerzas, pero porqué no dejas la función así como la tienes:
Código: [ Debe registrarse para ver este enlace ]
function confirmar(archivoEliminar, i)
Y simplemente pasas los parámetros igual :S es decir si es video archivoEliminar va a contener la ruta del video y la i su id :S es decir es lo mismo pasarle un archivo que un video y más porque lo tratas de la misma manera :S osea si lo dejas así como esta:
Código: [ Debe registrarse para ver este enlace ]
function confirmar(archivoEliminar, i)
{
  if(confirm('¿Realmente desea eliminar el archivo por completo? \n\n NOTA :: El archivo dejará de existir para siempre.')) 
  {
    conexion=HttpRequest();
    conexion.onreadystatechange = dibujar;
    conexion.open('POST','?'+location.search.substring(1), true);
    conexion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    conexion.send("&dato="+archivoEliminar);

  } else {
   conexion='';
  }
Debe funcionar perfectamente independientemente de que le pases como parametro un archivo o video, porque? pues porque si le pasas un archivo recibira como parametro la ruta del archivo si le pasas un video recibira la ruta del video es decir es lo mismo :S ya si no entendiste nada y afuerzas quieres pasar mas parametros pues pasa nomas 3:
Código: [ Debe registrarse para ver este enlace ]
function confirmar(archivoEliminar, i,videoOarchivo)
y simplemente en el último parametro pasas un número que indique si el archivo es video o es un archivo es decir:
Código: [ Debe registrarse para ver este enlace ]
function confirmar(archivoEliminar, i,videoOarchivo)
{
  if(confirm('¿Realmente desea eliminar el archivo por completo? \n\n NOTA :: El archivo dejará de existir para siempre.')) 
  {
    conexion=HttpRequest();
    conexion.onreadystatechange = dibujar;
    conexion.open('POST','?'+location.search.substring(1), true);
    conexion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    if(videoOarchivo==1) //Es archivo
      //lo tratas como si fuera archivo
      conexion.send("&dato="+archivoEliminar);
    else(videoOarchivo==2) //Es video
      //Lo tratas como video
      conexion.send("&dato="+archivoEliminar);

  } else {
   conexion='';
  }
Y lo llamas así :
Código: [ Debe registrarse para ver este enlace ]
<input onclick="return confirmar('VIDEOS/webflv2345652.flv', '1',2);">
Pero como te digo esto no deberías hacerlo así deberia dar igual que fuera archivo o video porque? porque a los dos los tratas de la misma forma :P Sí por ejemplo los videos necesitaran un parametro extra que el de archivos entonces sí por ejemplo:

Código: [ Debe registrarse para ver este enlace ]
function confirmar(archivoEliminar, i,videoOarchivo)
{
  if(confirm('¿Realmente desea eliminar el archivo por completo? \n\n NOTA :: El archivo dejará de existir para siempre.')) 
  {
    conexion=HttpRequest();
    conexion.onreadystatechange = dibujar;
    conexion.open('POST','?'+location.search.substring(1), true);
    conexion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    if(videoOarchivo==1) //Es archivo
      //lo tratas como si fuera archivo
      conexion.send("&dato="+archivoEliminar);
    else(videoOarchivo==2) //Es video
      //Lo tratas como video
      conexion.send("&dato="+archivoEliminar+i+fecha+algo); //parametro extra

  } else {
   conexion='';
  }
 #281424  por Z3R0N3
 29 Mar 2011, 00:19
Perfecto linkgl, como siempre se te agradece que hagas "mis deberes..." gracias enserio.


Al final el code quedó así:
Código: [ Debe registrarse para ver este enlace ]
var conexion;
function confirmar(Eliminar, datos, tipo)
{
  if(confirm('¿Realmente desea eliminar el archivo por completo? \n\n NOTA :: El archivo dejará de existir para siempre.')) 
  {
    conexion=HttpRequest();
    conexion.onreadystatechange = dibujar;
    conexion.open('POST','?'+location.search.substring(1), true);
    conexion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    conexion.send("&dato="+Eliminar);

  } else {
	conexion='';
  }
function dibujar()
{
  if(conexion.readyState == 4) {
  	if (tipo == '1') { $('div#eliminar'+datos).remove(); document.getElementById("proceso").innerHTML = 'Archivo eliminado'; }
	else if (tipo == '2') { $('div#veliminar'+datos).remove(); document.getElementById("vproceso").innerHTML = 'Video eliminado'; }
  } else {
    if (tipo == '1') { document.getElementById("proceso").innerHTML = 'Eliminando Archivo'; }
	else if (tipo == '2') { document.getElementById("vproceso").innerHTML = 'Eliminando Video'; }
	}
}
}
Gracias amigo. Nose como puedo caer en errores tan estúpidos... jeje como siempre. Gracias.
 #281536  por Z3R0N3
 29 Mar 2011, 09:19
linkgl escribió:Haha tranquilo estamos para ayudar. :P Que bueno que de algo te he servido.
Como siempre... seguro que aunque sea para darme ideas me sirves linkgl :D. Gracias men, te debo una