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:
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.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 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 :
Questa è la funzione che mi crea l'oggetto xmlhttprequest in base al tipo di browser: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; } } }
ed infine questa è la pagina getTipoVeicolo.php che preleva i dati dal db e restituisce le option desiderate: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; }
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!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"); ?>
Vi ringrazio in anticipo!

Rispondi quotando
