Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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??
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); if($Rs01["Modelo_Id"] == $Modelo_Id) $selected = "selected";
else $selected = "";
$opt .= "<option value=\"".$Rs01["Modelo_Id"]."\" $selected >".$Rs01["Modelo_Nome"]."</option>\n";
}
echo $opt;
}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.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.
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.
Como você monta o formulário para editar o registro? Poste o código utilizado.
Carlos Eduardo
Aparece 'carregando...' pq você manda aparecer:
jQuery('select.'+cont).html('<option value="">Carregando...</option>');
estude sobre usar **append**e 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>'; ?>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 =\
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.
poste o conteúdo da função geraModel.
Utilize um navegador com suporte a depuração javascript ou adicione uma extensão.