Ok
El código controla los cambios en 5 selects que están relacionados. Cuando se cambia la categoría general se guarda el índice de la categoría seleccionada en $_SESSION["Ci"]. Al cambiar el siguiente select $_SESSION["Ci"] vale sizeof($_SESSION["categorias"])
pego el código:
Código PHP:
Ver originalfunction modificarSlcsCatPrd(i) {
var slcCategorias=document.getElementById("slcCategoriasPrd");
var slcSubCat1=document.getElementById("slcSubCat1Prd");
var slcSubCat2=document.getElementById("slcSubCat2Prd");
var slcSubCat3=document.getElementById("slcSubCat3Prd");
var slcSubCat4=document.getElementById("slcSubCat4Prd");
if(i==1) {
slcSubCat1.length=1;
slcSubCat2.length=1;
slcSubCat3.length=1;
slcSubCat4.length=1;
<?php
$id_cat=0;
$i=0;
while(isset($_SESSION["categorias"][$i])) { ?> if(slcCategorias.value==<?=$_SESSION["categorias"][$i]->get_id_categoria();?>) {
<?php
$_SESSION["Ci"]=$i;
?>
alert("Prod i: " + <?=$i?>);
alert("Prod S[i]: " + <?=$_SESSION["Ci"]?>);
<?php
if($_SESSION["categorias"][$i] instanceof Categoria) $sc1=$_SESSION["categorias"][$i]->get_subcategorias();
$j=0;
while(isset($sc1[$j])) { ?> var nuevoOpt = document.createElement('option');
nuevoOpt.text = "<?=$sc1[$j]->get_nombre(); ?>"
nuevoOpt.value = "<?=$sc1[$j]->get_id_categoria(); ?>"
try {
slcSubCat1.add(nuevoOpt, null); //todos navegadores
}
catch(ex) {
slcSubCat1.add(nuevoOpt); // IE
}
<?php
$j++;
} ?>
}
<?php
$i++;
} ?>
}
else if(i==2) {
slcSubCat2.length=1;
slcSubCat3.length=1;
slcSubCat4.length=1;
alert("sc: " + slcSubCat1.value);
alert("$_SESSION['Ci']: " + <?=$_SESSION["Ci"]?>);
<?php
if(isset($_SESSION["Ci"])) { if($_SESSION["categorias"][$_SESSION["Ci"]] instanceof Categoria) {
//$sc1=$_SESSION["categorias"][$_SESSION["Ci"]]->get_subcategorias();
$sc1=$_SESSION["categorias"][$id_cat]->get_subcategorias();
}
$i=0;
while(isset($sc1[$i])) {?> alert("recorriendo: <?=$sc1[$i]->get_id_categoria()?>");
if(slcSubCat1.value==<?=$sc1[$i]->get_id_categoria()?>) {
alert("dentro del if");
<?php
$_SESSION["SC1i"]=$i;
if($sc1[$i] instanceof Categoria)$sc2=$sc1[$i]->get_subcategorias();
$j=0;
while(isset($sc2[$j])) {?> var nuevoOpt = document.createElement('option');
nuevoOpt.text = "<?=$sc2[$j]->get_nombre(); ?>"
nuevoOpt.value = "<?=$sc2[$j]->get_id_categoria(); ?>"
try {
slcSubCat2.add(nuevoOpt, null); //todos navegadores
}
catch(ex) {
slcSubCat2.add(nuevoOpt); // IE
}
<?php
$j++;
}?>
}
<?php
$i++;
}
}?>
}
else if(i==3) {
slcSubCat3.length=1;
slcSubCat4.length=1;
<?php
if(isset($_SESSION["Ci"]) && isset($_SESSION["SC1i"])) { if($_SESSION["categorias"][$_SESSION["Ci"]] instanceof Categoria) $sc1=$_SESSION["categorias"][$_SESSION["Ci"]]->get_subcategorias();
if($sc1[$_SESSION["SC1i"]] instanceof Categoria) $sc2=$sc1[$_SESSION["SC1i"]]->get_subcategorias();
$i=0;
while(isset($sc2[$i])) { ?> if(slcSubCat2.value==<?=$sc2[$i]->get_id_categoria()?>) {
<?php
$_SESSION["SC2i"]=$i;
$sc3=$sc2[$i]->get_subcategorias();
$j=0;
while(isset($sc3[$j])) {?> var nuevoOpt = document.createElement('option');
nuevoOpt.text = "<?=$sc3[$j]->get_nombre(); ?>"
nuevoOpt.value = "<?=$sc3[$j]->get_id_categoria(); ?>"
try {
slcSubCat3.add(nuevoOpt, null); //todos navegadores
}
catch(ex) {
slcSubCat3.add(nuevoOpt); // IE
}
<?php
$j++;
}?>
}
<?php
$i++;
}
}?>
}
else if(i==4) {
slcSubCat4.length=1;
<?php
if(isset($_SESSION["Ci"]) && isset($_SESSION["SC1i"]) && isset($_SESSION["SC2i"])) { if($_SESSION["categorias"][$_SESSION["Ci"]] instanceof Categoria) $sc1=$_SESSION["categorias"][$_SESSION["Ci"]]->get_subcategorias();
if($sc1[$_SESSION["SC1i"]] instanceof Categoria) $sc2=$sc1[$_SESSION["SC1i"]]->get_subcategorias();
if($sc2[$_SESSION["SC2i"]] instanceof Categoria) $sc3=$sc2[$_SESSION["SC2i"]]->get_subcategorias();
$i=0;
while(isset($sc3[$i])) {?> if(slcSubCat3.value==<?=$sc3[$i]->get_id_categoria()?>) {
<?php
$_SESSION["SC3i"]=$i;
$sc4=$sc3[$i]->get_subcategorias();
$j=0;
while(isset($sc4[$j])) {?> var nuevoOpt = document.createElement('option');
nuevoOpt.text = "<?=$sc4[$j]->get_nombre(); ?>"
nuevoOpt.value = "<?=$sc4[$j]->get_id_categoria(); ?>"
try {
slcSubCat4.add(nuevoOpt, null); //todos navegadores
}
catch(ex) {
slcSubCat4.add(nuevoOpt); // IE
}
<?php
$j++;
}?>
}
<?php
$i++;
}
}?>
}
else alert("Ha ocurrido un error desconocido: modificarSlcsCatPrd(i)");
}
El problema no es al refrescar la página