Selección de Combo cargado dinámicamente

Bien en mi caso tengo un combo cargado desde un base de datos de la siguiente manera:
<form name="ctas_usuario" method="post" action="trans-usuario.php" onsubmit="validacion_datos();">
<select name="cbopais" id="cbopais">     
 <?php
    require_once 'clases/cspais.php';
  $objCSPais = new CSPais();
  $objCSPais->cargaPaisCombo(-1, "null");
 ?>  
</select>
</form>
cargaPaisCombo es un método en el cual cuando mando -1 y "null" se me cargan toda lista de los países hasta ahí todo excelente pero ahora mi pregunta es como hago si se da el caso de que se cual el país del usuario y quiero que se muestre seleccionado ese país he visto muchos sitios que lo hacen... Mi script con el que trato de hacer esto esta así:
function validacion_datos(){
var f=document.forms.ctas_usuario;
f.cbopais.selectedIndex=<?php echo  $objCSPais->CodPais?>;
}
¿Ahora creo que esta mal puesto en evento submit del formulario porque entiendo que este se ejecuta al enviar entonces sino es ese cual? O si de plano estoy que perdido con este embrollo espero me ayuden... De antemano gracias...

1 Respuesta

Respuesta
1
¿Por qué lo quieres hacer con js? Es mucho más fácil hacerlo directamente en php. Revisa el método cargarPaisCombo, para que acepte un valor predeterminado, y lo marque como selected.
Por otro lado, esa función de JavaScript, es posible que sólo funcione en Internet Explorer
Marcelo
Gracias por la prontitud de tu respuesta maop84 realmente pocas veces pregunto porque prefiero darme contra el suelo cuando algo no me sale je je pero bien te cuento que si lo hice funcionar pero de esta manera:
1.- Cree un script así:
<script>
function selectindexcbo()
{
 var f=document.forms.ctas_usuario;
 var codpais=<?php echo $cod_pais;?>;
 for (i=0; i<f.cbopais.length; i++)
 {
    if(f.cbopais.options.value == codpais)
    {
       f.cbopais.selectedIndex = i;   
    }
 }
}
</script>
2.-  Ese script lo llamo desde la etiqueta
<body>
asi:
<body onLoad="selectindexcbo();">
3.- Es decir tengo lo siguiente:
<?php session_start();
require_once 'clases/cstransusuario.php';
if ($_SESSION["cod_usuario"] != "")
{
    $objCSTransUsuario = new CSTransUsuario();
    $objCSTransUsuario->verificaUsuarioxCodigo($_SESSION["cod_usuario"]); 
    $cod_pais = $objCSTransUsuario->CodPais;
}
?>
<html>
<head>
<title>Biblioteca Virtual</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
function selectindexcbo()
{
 var f=document.forms.ctas_usuario;
 var codpais=<?php echo $cod_pais;?>;
 for (i=0; i<f.cbopais.length; i++)
 {
  if(f.cbopais.options.value == codpais)
  {
   f.cbopais.selectedIndex = i;   
  }
 }
}
</script>
</head>
<body onLoad="selectindexcbo();">
<form name="ctas_usuario" method="post" onsubmit="return validacion_datos();" action="trans-usuario.php">
 <select name="cbopais" id="cbopais">     
 <?php
    require_once 'clases/csubicaciongeografica.php';
  $objCSPais = new CSPais();  
  $objCSPais->cargaPaisCombo(-1, "null");
 ?>      
</select><br/>
</form>
</body>
Pero como tu me dices: "es mucho más fácil hacerlo directamente en php. revisa el método cargarPaisCombo, para que acepte un valor predeterminado, y lo marque como selected."
Entonces aqui esta mi metodo:
public function cargaPaisCombo($codpais, $pais)
 {
  $this->SqlString = "CALL sprs_selListPaises($codpais,'" .$pais. "');"; 
  try
  {
    if($this->dbConnect())
    {   
       $this->dbBeginTransaction();  
       $reg=$this->dbSelect($this->SqlString);             
       echo '<option value=0>'."Seleccione un Pais".'</option>';
       for($i=1; $i<count($reg); $i++)
       {         
           echo '<option value="'.$reg[$i]->cod_pais.'">'. htmlentities($reg[$i]->pais).'</option>';    
       }         
       $this->dbEndTransaction();
       $this->dbClose();
    }   
  }
  catch(Exception $e)
  {
   $this->dbClose();
  }
 }
¿Dónde podría hacer que me lo marque como selected?
Quiero decir que la verdad tengo poco tiempo en php y hay muchas cosas que se escapan de la manos...
Quedaría algo así
public function cargaPaisCombo($codpais, $pais, $seleccionado)
 {
  $this->SqlString = "CALL sprs_selListPaises($codpais,'" .$pais. "');";
  try
  {
    if($this->dbConnect())
    {   
       $this->dbBeginTransaction();  
       $reg=$this->dbSelect($this->SqlString);             
       echo '<option value=0>'."Seleccione un Pais".'</option>';
       for($i=1; $i<count($reg); $i++)
       {  
        if($reg[$i]->cod_pais == $seleccionado){
            $selected = "selected=\"selected\"";
        }
        else{
            $selected = '';
        }
           echo '<option $selected value="'.$reg[$i]->cod_pais.'">'. htmlentities($reg[$i]->pais).'</option>';    
       }         
       $this->dbEndTransaction();
       $this->dbClose();
    }   
  }
  catch(Exception $e)
  {
   $this->dbClose();
  }
 }
Marcelo
Vaya Marcelo que excelente solución ahora entiendo porque dijiste: "es mucho más fácil", ... mientras yo me estaba yendo por cosas paranormales tu en 2 patadas me das la solución... eternamente agradecido...
Saludos
Cristhian Kasco

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas