Foros del Web » Programando para Internet » Javascript »

Funcion no se ejecuta completa

Estas en el tema de Funcion no se ejecuta completa en el foro de Javascript en Foros del Web. Saludos cordiales!! Mi problema es el siguiente: Tengo un sistema que realiza varias acciones tipo excel, es una tabla con varias columnas y algunas de ...
  #1 (permalink)  
Antiguo 12/04/2007, 15:38
Avatar de jeanclon  
Fecha de Ingreso: mayo-2005
Mensajes: 258
Antigüedad: 19 años
Puntos: 2
Funcion no se ejecuta completa

Saludos cordiales!!

Mi problema es el siguiente:
Tengo un sistema que realiza varias acciones tipo excel, es una tabla con varias columnas y algunas de ellas pueden ser filtradas para mostrar solo lo que se quiere. Todo el proceso del filtrado se realiza con javascript. Los datos totales vienen de una base de datos.

Ahora mi problema es el siguiente, una columna posee Un boton de accion, (dinamico por la cantidad de filas traidas de la base de datos, le asigno como valor un id). Una opcion del sistema seria marcar Automaticamente todos los checks que sean visibles (por si acaso hay un filtro activo). Lo de marcarlos todos no fue problema, ahora el problema se presento, fue cuando se me solicito que la accion de marcar todos los checks de las filas visibles funcionara solo si el valor de un campo de una columna sea uno solo. (explico esto por si acaso, como si fuera excel).

*** Teniendo una tabla con valores se realizara un filtrado para que todos los valores de la columna D sean iguales ***

EL FILTRO LO QUE HACE ES COLOCAR VISIBLE O NO LAS FILAS.

Pongo el codigo de la funcion:
Código:
<script language="javascript">
function validar_marcar_all(cantidad_asignados) {
var x
for(x=0;x<=cantidad_asignados;x++){
var fila_actual_x = 'celda_'+x
if (document.getElementById(fila_actual_x).style.display==""){
var campo_rubro = 'campo_rubro_'+x;
var valor_rubro = document.getElementById(campo_rubro).value;
break;      
}
}
var y
for(y=0;y<=cantidad_asignados;y++){
var fila_actual_y = 'celda_'+y;
var campo_rubro_y = 'campo_rubro_'+y;
var valor_campo_rubro = document.getElementById(campo_rubro_y).value;
if (document.getElementById(fila_actual_y).style.display=="" && valor_campo_rubro!=valor_rubro){
alert("Existen rubros distintos, por favor aplique un filtro antes del marcado masivo.");
break;
}
}
alert(valor_rubro);
}
</script>
Del codigo explico:
* El primer for: desde 0 hasta la cantidad de filas totales que viene de la base de datos.
* la variable fila_actual_x la utilizo para guardar alli el id de la fila (dinamico).
Que luego utilizo para preguntar si la fila actual que esta verificando el for es o no visible (por si acaso se aplico un filtro).
** Esto lo hago para obtener el primer valor de la celda requerida correspondiente a la primera fila que se encuentre visible (un solo valor).

* El segundo for hace el mismo recorrido completo igual que el anterior. Solo que pregunta si el valor de la celda actual que sea visible es igual al valor obtenido en el for anterior.
Asi comparo todo para ver si toda esa columna tiene un solo valor o posee valores distintos.

Hice toda esta explicacion para ver si alguien sabe una forma diferente o mas facil. Por que el error o lo que no funciona es que la funcion no se ejecuta toda. El alert(valor_rubro); nunca se ejecuta.

Por que no se ejecuta ese alert??, alli deberia ir el llamado a la funcion que haria el marcado de todos los checks. (claro preguntando si nunca entro en el error, etc. pero esa parte la he quitado). Espero que alguien pueda ayudarme.

Ah y gracias de antemano.
  #2 (permalink)  
Antiguo 12/04/2007, 23:53
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Re: Funcion no se ejecuta completa

Yo lo que veo es que las líneas siguiente no terminan con ';' (a mi me eso me ha dado problemas con IE)

Código:
var x
var fila_actual_x = 'celda_'+x
var y
Y luego dices que desde la BD te devuelve las cantidad_asignados, así que si por ejemplo es '3', y recorres :

Código:
for( x=0; x<=cantidad_asignados; x++ )
Para que te cree TRES filas seŕia (los índices sería 0,1,2), dependiendo esto de como tengas la otra parte del código:

Código:
for( x=0; x < cantidad_asignados; x++ )
Y por último, el alert no te muestra nada porque en ese punto parece que no tienes declarada la variable 'valor_rubro'... al declararla en el 'if' será visible sólo dentro de él... fuera no existe (la declaras al principio de la función y listo).

Un saludo.
  #3 (permalink)  
Antiguo 13/04/2007, 05:25
 
Fecha de Ingreso: abril-2007
Mensajes: 19
Antigüedad: 17 años
Puntos: 1
Re: Funcion no se ejecuta completa

A parte de esas observaciones le animaría para que aprenda a programar indentando el código, se ve mucho más claro donde te puede fallar la estructura y otra cosa...

¿que es eso de salir de un bucle IF o FOR a base de break?

seguro que hay alguna forma más facil de hacerlo, te sugiero que antes de empezar a programar te lo pintes en papel por lo menos el pseudocódigo y pienses un par de veces si eso es lo mejor antes de ponerte a picar.

Es una crítica constructiva, no por ofender.

Un saludo
  #4 (permalink)  
Antiguo 13/04/2007, 13:52
Avatar de jeanclon  
Fecha de Ingreso: mayo-2005
Mensajes: 258
Antigüedad: 19 años
Puntos: 2
Re: Funcion no se ejecuta completa

Ok con respecto a lo del ;, no es esa la falla, ya lo habia probado y con ; o sin el dio igual. En fin se los pongo.

Lo otro que me dices de los indices no lo entiendo muy bien. El alert que coloque fue solo por colocar algo, si pongo cualquier cosa alli, asi sea un alert con algo escrito, no aparece.

Lo del usar break tienes razon y la critica es muy buena, a mi tampoco me gusta usarlos, lo que pasa es que el codigo no es mio, simplemente ayudo a alguien en su parte. Ya se que usando un while no tendria necesidad de los if junto con esos espantosos break.

Voy a ver si cambiandolos por unos while si funciona la funcion completa (valga la redundacia). Les estare comentando.
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 06:13.