Quero exibir vários sets de informação na página, mas só estou conseguindo um;
Tenho um form com combos dependentes
Escolhe tipo de produto, lista apenas os tipos de produtos
Escolhe marca, mostra as marcas do tipo rscolhido acima
Escolhe modelo, mostra os modelos da marca escolhida acima
O meu códio funciona bem com um set, ou seja, dá pra escolher um tipo, uma marca e um modelo, porém eu preciso usar vários sets na página, se alguém puder ajudar, dando uma dica de onde mudar o código, fico agradecidoo
parte ajax
function novoAjax()
{
/* Cria o objeto AJAX. Esta função é genérica pera qualquer aplicação deste tipo*/
var xmlhttp=false;
try
{
// Cria o objeto AJAX nos navegadores não Internet Explores (Firefox, Opera)
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
// Cria o objeto AJAX nos navegadores Internet Explorer
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(E)
{
if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
}
}
return xmlhttp;
}
// Declara os combos que compõem o documento html. Os atributos id devem ser declarados aqui.
var listadeCombos=new Array();
listadeCombos[0]="tipo1";
listadeCombos[1]="marca1";
listadeCombos[2]="modelo1";
function buscaremArray(array, dados)
{
// Retorna o índice da posição onde se encontra o elemento no array ou deixa nulo se não encontra
var x=0;
while(array[x])
{
if(array[x]==dados) return x;
x++;
}
return null;
}
function carregaConteudo(idComboOrigem)
{
// Obtém a posição que ocupa o combo que deve ser carregado no array declarado acima
var posicaoComboDestino=buscaremArray(listadeCombos, idComboOrigem)+1;
// Obtém o combo que o usuário modificou
var comboOrigem=document.getElementById(idComboOrigem);
// Obtém a opção que o usuário selecionou
var opcaoSelecionada=comboOrigem.options[comboOrigem.selectedIndex].value;
// Se o usuário escolheu a opção "-- Selecione -- ", não consulta o servidor e coloca nos combos seguintes a mensagem "-- Selecione --"
if(opcaoSelecionada==0)
{
var x=posicaoComboDestino, comboAtual=null;
// Busca todos os combos posteriores ao que iniciou o evento onChange e muda o seu estado para disabled
while(listadeCombos[x])
{
comboAtual=document.getElementById(listadeCombos[x]);
comboAtual.length=0;
var novaOpcao=document.createElement("option"); novaOpcao.value=0; novaOpcao.innerHTML="-- Selecione --";
comboAtual.appendChild(novaOpcao); comboAtual.disabled=true;
x++;
}
}
// Certifica- se de que o combo modificado não é o último da cadeia
else if(idComboOrigem!=listadeCombos[listadeCombos.length-1])
{
// Obtém o elemento do combo que deve ser carregado
var idSelectDestino=listadeCombos[posicaoComboDestino];
var selectDestino=document.getElementById(idSelectDestino);
// Cria o novo objeto AJAX e envia ao servidor o id do combo a ser carregado e a opção selecionada no combo de origem
var ajax=novoAjax();
ajax.open("GET", "processo.php?select="+idSelectDestino+"&opcao="+opcaoSelecionada, true);
ajax.onreadystatechange=function()
{
if (ajax.readyState==1)
{
// Elimina a mensagem "-- Selecione --" e coloca em seu lugar a mensagem "Carregando..."
selectDestino.length=0;
var novaOpcao=document.createElement("option"); novaOpcao.value=0; novaOpcao.innerHTML="Carregando...";
selectDestino.appendChild(novaOpcao); selectDestino.disabled=true;
}
if (ajax.readyState==4)
{
selectDestino.parentNode.innerHTML=ajax.responseText;
}
}
ajax.send(null);
}
}
parte.php
<?php
// Array que vincula o id dos combos declarados no html com o nome da tabela onde se encontra o seu conteúdo
$listaCombos=array(
"tipo1"=>"tipos",
"marca1"=>"marcas",
"modelo1"=>"modelos",
);
function validaCombo($comboDestino)
{
// Só valida se o combo enviado via GET existir
global $listaCombos;
if(isset($listaCombos[$comboDestino])) return true;
else return false;
}
function validaOpcao($opcaoSelecionada)
{
// Só valida se a opção selecionada pelo usuário no combo tiver um valor numérico
if(is_numeric($opcaoSelecionada)) return true;
else return false;
}
$comboDestino=$_GET["select"]; $opcaoSelecionada=$_GET["opcao"];
if(validaCombo($comboDestino) && validaOpcao($opcaoSelecionada))
{
$tabela=$listaCombos[$comboDestino];
include 'conexion.php';
conectar();
$consulta=mysql_query("SELECT id, opcao FROM $tabela WHERE relacao='$opcaoSelecionada'") or die(mysql_error());
desconectar();
// exibe o combo
echo "<select name='".$comboDestino."' id='".$comboDestino."' onChange='carregaConteudo(this.id)'>";
echo "<option value='0'>-- Selecione --</option>";
while($registro=mysql_fetch_row($consulta))
{
// Converte caracteres conflitantes para suas respectivas entidades html para uma visualização correta
$registro[1]=htmlentities($registro[1]);
// exibe as opções do combo
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
}
echo "</select>";
}
?>
Pergunta
heavymetal
Olá pessoal, estou com um problema com o ajax.
Quero exibir vários sets de informação na página, mas só estou conseguindo um;
Tenho um form com combos dependentes
Escolhe tipo de produto, lista apenas os tipos de produtos
Escolhe marca, mostra as marcas do tipo rscolhido acima
Escolhe modelo, mostra os modelos da marca escolhida acima
O meu códio funciona bem com um set, ou seja, dá pra escolher um tipo, uma marca e um modelo, porém eu preciso usar vários sets na página, se alguém puder ajudar, dando uma dica de onde mudar o código, fico agradecidoo
parte ajax
parte.php parte php no formulárioDesde já agradecido!!!
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.