Muy buenas a todos. Antes que nada quiero pedir disculpas porque admito que soy nulo en javascript, en lo que es el código.
Verán en mi página web, he colocado un formulario con una opción de Autocompletar algunos campos en función del texto introducido.
Es una web sobre fotografías de aviones, pongo un ejemplo:
En el formulario hay desplegables para seleccionar "País" "Aeropuerto" "Fabricante del aparato" "modelo" "Aerolinea".
Para los dos primeros, si se introduce el código del Aeropuerto, en el desplegable se selecciona directamente el país y el nombre, por ejemplo si escribimos MAD y pulsamos el botón, se auto selecciona España->Madrid (sin recarga de la página).
Para los otros dos utilizamos la matrícula del avión.
Según lo tengo funciona perfectamente, salvo por un pequeño detalle, a veces los aviones cambian de aerolinea, y si en la base de datos hay dos datos diferentes, en lugar de mostrar uno de los dos, no muestra ninguno, es como si no existiese en la base de datos.
**Tenemos una base de datos tanto con paises/aeropuertos como con aviones/aerolineas.
Ya digo que con un registro unico, funciona perfecto.
Mi pregunta es, es posible de alguna manera... que de encontrar más de un resultado, se muestren de alguna forma para poder elegir entre los dos cual es el que queremos asignar???
Mi idea es que al poner uno de estos, se descubra un div con las opciones o algo así, o de alguna otra manera.
Si a alguien se le ocurre la solución y me aporta una solución, puedo enviarte un pago justo via paypal, es en serio. Es muy importante este paso para el proyecto que tengo entre manos... ruego ayuda.
A continuación pondré los códigos :
selects.js
Código:
$(document).ready(function(){
$("#pais").change(function(){
$("#aeropuerto").html("<option value=\"0\">Procesando...</option>");
$("#loading").show();
$.post("http://"+document.domain+"/wp-content/plugins/air/selects.php",{
id : "airport",
country : $("#pais").val()
}, function(data){
$("#aeropuerto").html(data);
$("#loading").hide();
});
});
$("#fabricante").change(function(){
if($(this).val() == "add"){
$("#div_custom_fabricante").show();
$("#div_custom_modelo").show();
$("select[name=aeronave]").attr("disabled", "disabled");
$("input[name=custom]").val("1");
}else{
$("#div_custom_fabricante").hide();
$("#div_custom_modelo").hide();
$("select[name=aeronave]").attr("disabled", "");
$("input[name=custom]").val("0");
$("#aeronave").html("<option value=\"0\">Procesando...</option>");
$("#loading2").show();
$.post("http://"+document.domain+"/wp-content/plugins/air/selects.php",{
id : "manufacturer",
manufacturer : $("#fabricante").val()
}, function(data){
$("#aeronave").html(data);
$("#loading2").hide();
});
}
});
$("#aeronave").change(function(){
if($(this).val() == "add"){
$("#div_custom_modelo").show();
$("input[name=custom_fab]").val("1");
}else{
$("#div_custom_modelo").hide();
$("input[name=custom_fab]").val("0");
}
});
$("#aerolinea").change(function(){
if($(this).val() == "add"){
$("#div_custom_aerolinea").show();
$("input[name=custom_aer]").val("1");
}else{
$("#div_custom_aerolinea").hide();
$("input[name=custom_aer]").val("0");
}
});
$("#aeropuerto").change(function(){
if($(this).val() == "add"){
$("#div_custom_aeropuerto").show();
$("input[name=custom_aeropu]").val("1");
}else{
$("#div_custom_aeropuerto").hide();
$("input[name=custom_aeropu]").val("0");
}
});
$("#autocompletar").click(function(ev){
if($("input[name=icao]").val() != "" && $("input[name=icao]").val() != "Autocompletar Aeropuerto"){
$.post("http://"+document.domain+"/wp-content/plugins/air/autocomplete.php",{
icao: $("input[name=icao]").val()
}, function(info){
if (info != ","){
aux = info.split(",");
$("#pais").val(aux[0]);
$.post("http://"+document.domain+"/wp-content/plugins/air/selects.php",{
id : "airport",
country : $("#pais").val()
}, function(data){
$("#aeropuerto").html(data);
$("#aeropuerto").val(aux[1]);
$("#loading").hide();
});
}}
);
}
if($("input[name=autocompletar_aeronave]").val() != "" && $("input[name=autocompletar_aeronave]").val() != "Autocompletar Aeronave"){
$.post("http://"+document.domain+"/wp-content/plugins/air/autocomplete.php",{
aeronave: $("input[name=autocompletar_aeronave]").val()
}, function(info){
if (info != ",,"){
aux2 = info.split(",");
$("#fabricante").val(aux2[0]);
$("#aerolinea").val(aux2[2]);
$("input[name=matricula]").val($("input[name=autocompletar_aeronave]").val().toUpperCase());
$.post("http://"+document.domain+"/wp-content/plugins/air/selects.php",{
id : "manufacturer",
manufacturer : $("#fabricante").val()
}, function(data){
$("#aeronave").html(data);
$("#aeronave").val(aux2[1]);
$("#loading2").hide();
});
}else{
$("input[name=matricula]").val($("input[name=autocompletar_aeronave]").val().toUpperCase());
}}
);
}
});
autocomplete.php
Código PHP:
<?php
include("../../../wp-load.php");
extract($_POST);
global $wpdb;
if($icao){
$res = $wpdb->get_results("SELECT pw_countries.id as idp, pw_airports.id as ida FROM pw_airports, pw_countries WHERE pw_countries.id = pw_airports.country AND pw_airports.ICAO = '$icao'");
if( $res == null){
$res = $wpdb->get_results("SELECT pw_countries.id as idp, pw_airports.id as ida FROM pw_airports, pw_countries WHERE pw_countries.id = pw_airports.country AND pw_airports.IATA = '$icao'");
}
echo $res[0]->idp.",".$res[0]->ida;
}
if($aeronave){
$res = $wpdb->get_results("SELECT pw_planes.modelo as idm, pw_planes.airline ida, pw_types.manufacturer as idf FROM pw_types, pw_planes WHERE pw_planes.modelo = pw_types.id AND pw_planes.matricula = '$aeronave'");
echo $res[0]->idf.",".$res[0]->idm.",".$res[0]->ida;
}
?>
Asumo que pertenece a una web que basa su contenido en wordpress, pero creo que no es relevante para el caso, porque creo entender que se trata más de la parte de Javascript que del propio WP.
Lo dicho, si alguien puede ayudar y se anima a solucionarlo puedo pagarle, en casos de php o cosas así con una orientación me sirve, pero es que en Javascript estoy pez pez.