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!