No es tan difícil como crees. Cuando elijas una opción del primer combo, se produce el evento
change, el cual puedes controlarlo con el método
change de jQuery. Luego, cada vez que elijas un valor distinto en el combo, utiliza el método
ajax de jQuery para envíar una petición asíncrona (Ajax) hacia un archivo que en el lado del servidor buscará las marcas que correspondan con el elemento seleccionado. En dicho archivo, además de buscar las marcas, cargarás a un segundo combo con dichos datos, el cual representará a la respuesta del servidor en la petición asíncrona. Luego, en el primer archivo, solamente te quedaría dicha respuesta al contenido de una capa que debes crear previamente y colocarla ya sea abajo o al costado del primer combo.
Primer archivo
Código Javascript
:
Ver original$("#vehiculos").change(function(){
if ($(this).val() != "Ninguno"){
$.ajax({
url: "segundo_archivo.php",
type: "GET",
data: {
opcion: $(this).val()
}
}).done(function(response){
$("#respuesta").html(response);
}).fail(function(jqXHR, textStatus){
$("#respuesta").html("Ha ocurrido un error: " + textStatus);
});
}
});
Segundo archivo
Código PHP:
Ver original<?php
$query = mysqli_query($conexion, "SELECT * FROM marcas WHERE vehiculo = $opcion"); ?>
<select id = "marcas" name = "marcas">
<?php
?>
<option value = <?=$row["id_marca"]?> <?=$row["marca"]?> </option>
<?php
}
?>
</select>
<?php
}
?>
También es posible hacerlo con código JavaScript nativo.
Código Javascript
:
Ver originalvar vehiculos = document.getElementById("vehiculos");
vehiculos.addEventListener("change", function(){
if (this.value != "Ninguno"){
var ajax = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP") || new ActiveXObject("Msxml2.XMLHTTP"),
respuesta = document.getElementById("respuesta");
ajax.open("GET", "segundo_archivo.php?opcion=" + this.value, true);
ajax.onreadystatechange = function(){
if (ajax.readyState == 4){
switch (ajax.status){
case 200:
respuesta.innerHTML = ajax.responseText;
break;
case 404:
respuesta.innerHTML = "La dirección brindada no existe";
break;
default:
respuesta.innerHTML = "Error: " + ajax.status;
break;
}
}
};
ajax.send();
}
}, false);
Saludos