Salve a tutti,
sono 3 giorni che giro il web alla ricerca della soluzione a questo maledetto problema di compatibilità, e quando sembrava tutto risolto, rendendo le mie select funzionanti su IE8, Chrome e Firefox, ecco che il buon vecchio IE7 decide di farmi uno scherzetto...
Si tratta delle classiche select riempite dinamicamente con AJAX, prendendo i dati da un DB, con PHP, vi incollo il codice:
codice:
Settore tariffario:
<select name="settariffa" id="settariffa" onchange="getTipoVeicolo(this.options[this.selectedIndex].value);">
<option value="seleziona" selected="selected">Seleziona</option>
<?php
$query="SELECT nome FROM settoretariffario";
$row = mysql_query($query);
while ($riga = mysql_fetch_array($row)){
echo "<option>".$riga['nome']."</option>";
}
?>
</select>
</p>
Questa è la prima select che contiene alcuni valori presi dal DB, invoco la funzione getTipoVeicolo che in base al valore della option selezionata, tramite AJAX dovrebbe riempire l'altra select.
Questa è la funzione getTipoVeicolo inclusa nel codice js:
codice:
function getTipoVeicolo(str){
var url = "getTipoVeicolo.php?q="+str;
request = CreaOggettoXMLHttpRequest(tipoVeicolo);
request.open("GET",url,true);
request.send(null);
}
Questa è la funzione tipoVeicolo, che ho trovato in giro per il web, grazie a questo stratagemma, nel caso in cui si tratti di IE crea una option forfettara che verrà poi eliminata dal browser, e permette il funzionamento su IE8 :
codice:
function tipoVeicolo(){
if(request.readyState == 4 && request.status == 200){
document.getElementById("ptipoveicolo").style.display = "block";
if(document.all){
opts="<option>opzione</option>"+request.responseText;
}
else{
opts=request.responseText;
}
document.getElementById("tipospecveicolo").innerHTML = opts;
if (document.all){
document.getElementById("tipospecveicolo").outerHTML = document.getElementById("tipospecveicolo").outerHTML;
}
}
}
Questa è la funzione che mi crea l'oggetto xmlhttprequest in base al tipo di browser:
codice:
var request = null;
function CreaOggettoXMLHttpRequest(hand)
{
var xmlHttp;
try{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch(e){
// Internet Explorer
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
alert("Il tuo browser non supporta AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange= hand;
return xmlHttp;
}
ed infine questa è la pagina getTipoVeicolo.php che preleva i dati dal db e restituisce le option desiderate:
codice:
<?php
include ("include/start_conn.php");
if($_GET['q']){
$var = $_GET['q'];
$query = "SELECT tipo FROM tipospecificoveicolo WHERE nome= '".$var."'";
$ris = mysql_query($query);
echo "<option value=\"seleziona\" selected=\"selected\" disabled=\"disabled\">Seleziona</option>";
while ($riga = mysql_fetch_array($ris)){
echo "<option>".$riga['tipo']."</option>";
}
}
include ("include/close_conn.php");
?>
Su IE8,Firefox e Chrome, funziona senza problemi mentre su IE7, le option le restituisce, ma le restituisce vuote, e non so perchè, come se l'innerhtml non funzionasse, oppure il responsetext lo veda vuoto non saprei!
Vi ringrazio in anticipo!