Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alvarogtc

Problema com select usando jquery

Recommended Posts

ola pessoal, tenho um select (combo marcas e modelos)

 

function geraModel(marcas, modelos, cont){
jQuery('select.'+cont).html('<option value="">Carregando...</option>');
jQuery.post('geraModelo.php', { marca:marcas, modelo:modelos},function(resposta){
	 jQuery('select.'+cont).html('<option value="">- </option>'+resposta);
 });
}

 

Quando vou realizar um cadastro ocorre tudo bem, seleciona a marca e gera os modelos normalmente

 

o meu problema é que quando vou editar um registro.

 


<? if ($Marca_Id) {?>
<script>
geraModel('<? echo $Marca_Id;?>','<? echo $Modelo_Id;?>', 'recebeModels')
</script>
<? } ?>

 

Quando carrega a pagina busca a Marca normalmente porem nos modelos

 

aparece carregando.... (conforme o jquery que coloquei primeiro)

 

busca os resultados e o valor selecionado vem correto porem nao exibe o nome do modelo no caso.

 

Alguem pode me dar uma força pra resolver isso??

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste o conteúdo da função geraModel.

 

Utilize um navegador com suporte a depuração javascript ou adicione uma extensão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa é a funcao jquery que carrega os resultados

 

function geraModel(marcas, modelos, cont){
       jQuery('select.'+cont).html('<option value="">Carregando...</option>');
       jQuery.post('geraModelo.php', { marca:marcas, modelo:modelos},function(resposta){
                jQuery('select.'+cont).html('<option value="">- </option>'+resposta);
        });
}

 

Tudo funciona normal no cadastro, como disse anteriormente o problema é quando vou editar um registro (ja possui pois os campos ja possuem valores)

 

então utilizo esse javascript pra carregar os dados

 

<? if ($Marca_Id) {?>  // verifica se existe o registro pra então carregar
<script>
geraModel('<? echo $Marca_Id;?>','<? echo $Modelo_Id;?>', 'recebeModels')
</script>
<? } ?>

 

e aqui o arquivo php que faz a busca no banco

 

<?
include("../inc/config.php");

$Modelo_Id = mysql_real_escape_string($_REQUEST["modelo"]);
$Marca_Id = mysql_real_escape_string($_REQUEST["marca"]);

if($Marca_Id){
$Sql01 = "SELECT * FROM tabmodelos WHERE Marca_Id = '$Marca_Id' ORDER BY Modelo_Nome ASC";
$Query01 = mysql_query($Sql01, $Conn);
while($Rs01 = mysql_fetch_array($Query01)){
	if($Rs01["Modelo_Id"] == $Modelo_Id) $selected = "selected";
	else $selected = "";
	$opt .= "<option value=\"".$Rs01["Modelo_Id"]."\" $selected >".$Rs01["Modelo_Nome"]."</option>\n";
}
echo $opt;
}
else{
echo "<option value=\"\">- Select one Make</option>\n";
}
?> 

 

Como eu disse anteriormente

 

O problema é q na hora de editar (ja tem o valor do campo marca e modelo)

 

Porem no campo modelo (q é carregado baseado no campo marca)

 

aparece carregando

 jQuery('select.'+cont).html('<option value="">Carregando...</option>'); 

 

ai se eu clico no select ele carrega o valor correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz, nem vi que você já tinha postado a função, desculpe.

 

A lógica está correta. Teria como postar uma versão online para testarmos?? às vezes uma vírgula faz toda a diferença e o navegador pode ajudar a depurar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho como colocar online por agora,

 

AMigo todo o problema é aqui, vou explicar de novo

 

Eu vou no select, seleciono a marca -> carrega os modelos -> salvo no banco tudo normalmente.

 

Depois caso eu queira editar o registro que foi gravado

 

A marca e o modelo ja possuem valores, porem no campo modelo inves de aparecer o nome aparece carregando.

 

que é relacionado aqui:

 

jQuery('select.'+cont).html('<option value="">Carregando...</option>'); 

 

Bem vou pesquisar por ai, valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparece 'carregando...' pq você manda aparecer:

jQuery('select.'+cont).html('<option value="">Carregando...</option>');

 

estude sobre usar appende qndo tiver que zerar o select, zere apenas se o de cima pedir por isso.

 

em quais momentos você dispara a função: geraModel() [em quais eventos?]

<? if ($Marca_Id) {?>
<script>
geraModel('<? echo $Marca_Id;?>','<? echo $Modelo_Id;?>', 'recebeModels')
</script>
<? } ?>

esta chamada está incorreta.

você só deveria disparar no onchange do de cima, e não assim, no html direto, sem nenhum evento (ou seja, ao carregar até ali do html)

 

Para trazer no select, oq tá no banco, basta você mandar o php fazer isso pra você:

<select..
<?php echo '<option value="'.$dados['campo_da_tabela'].'">'.$dados['campo_da_tabela'].'</option>'; ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno, creio que esta já seja a página de edição que tenha que ter o combo box populado. O problema aí é que ele está sendo redundante, utilizando ajax para popular um combo que podia ser diretamente preenchido pelo server-side.

 

Na base do achismo, fica difícil ajudar =\

Compartilhar este post


Link para o post
Compartilhar em outros sites

oq vou postar o codigo inteiro aqui:

 

Primeiro meus dois selects

 


if($acao==2) { // para editar 

$Veiculo_Id = mysql_real_escape_string($_REQUEST["Veiculo_Id"]);
$Sql = "SELECT * FROM tabveiculos WHERE Veiculo_Id = '$Veiculo_Id' ";
$Query = mysql_query($Sql,$Conn) or die(mysql_error($Conn));
$Rs = mysql_fetch_array($Query);

$Tipo_Id = mysql_real_escape_string($Rs["Tipo_Id"]);
$Marca_Id = mysql_real_escape_string($Rs["Marca_Id"]);
$Modelo_Id = mysql_real_escape_string($Rs["Modelo_Id"]);

}

<p>
     	<label>Make</label><br />
       <select name="Marca_Id" label="Marca" required="required" id="Marca_Id" class="select styled tiny" onchange="geraModel(this.value, '', 'recebeModels')">
         <option value="">-</option>
         <?
         $Sql10 = "SELECT Marca_Id, Marca_Nome FROM tabmarcas ORDER BY Marca_Nome ASC";
	  $Query10 = mysql_query($Sql10, $Conn);
	  while($Rs10 = mysql_fetch_array($Query10)){
	  ?>
         <option value="<? echo $Rs10["Marca_Id"]?>" <? if ($Rs10["Marca_Id"] == $Marca_Id) echo "selected";?>><? echo $Rs10["Marca_Nome"] ?></option>
         <?
	  }
	  ?>
       </select> 
     </p>

     <p>
      <label>Model</label>
      <br/>
      <select label="Modelo" required="required" name="Modelo_Id" id="Modelo_Id" class="select styled tiny recebeModels">
      <option>Select one Make</option>
      </select>
     </p>

 

ai uso esse jquery

 

function geraModel(marcas, modelos, cont){
       jQuery('select.'+cont).html('<option value="">Carregando...</option>');
       jQuery.post('geraModelo.php', { marca:marcas, modelo:modelos},function(resposta){
                jQuery('select.'+cont).html('<option value="">- </option>'+resposta);
        });
}

 

e uso esse que o Bruno disse estar incorreto para popular

 

// Que so é chamado caso seja para editar o registro no cadastro não é utilizado

<? if ($Marca_Id) {?>
<script>
geraModel('<? echo $Marca_Id;?>','<? echo $Modelo_Id;?>', 'recebeModels')
</script>
<? } ?>

 

Como disse anteriormente, quando vou editar carrega a marca, e no select dos modelos o "value" vem correto porem inves de aparecer o nome do modelo aparece carregando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.