Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    ajax: explorer non vuole onclick nel menù

    Buongiorno a tutti. E' da circa un mese che ho uno script ajax che non vuole funzionare su Explorer, mentre su opera e FF non ha nessun problema.

    Ho scoperto solo oggi il problema: l'evento che fa partire il js è legato alla selezione di uno dei tanti valori di un menù a tendina. Immaginate di avere questo menù con dieci opzioni e sia la 1 che la 6, se selezionate, inviano tramite ajax la richiesta per creare un altro menù nella pagina.

    Detto questo, io creavo una cosa simile

    codice:
    <option value="1" onclick="caricaMenu('[la pagina da caricare]')">1</option>
    <option value="2">2</option>
    ...
    <option value="6" onclick="caricaMenu('[la pagina da caricare]')">6</option>
    Bello, quando clicko su quell'opzione mi parte il menù. Peccato che ad explorer questo "onclick" su una voce del menù non piace. Lo script funziona alla perfezione ANCHE su explorer se elimino quel menù e per esempio creo un link cliccabile (sempre con l'evento onclick).
    A questo punto non saprei come fare e imploro un vostro suggerimento.
    Nel frattempo mi scuso per la noia e per la lunghezza del post.

  2. #2
    è il tipico problema di JS con exploder: se carichi dell'HTML nella pagina con la definizione degli eventi in sintassi DOM0 allora gli eventi non vengono lanciati, bisogna definirli con la sintassi DOM1.

    Prima di darti un esempio una domanda: usi una libreria JS?
    I DON'T Double Click!

  3. #3
    Ciao artorius,
    oltre a non usare nessuna libreria JS (puro codice scritto a mano che ora ti posto) invio i dati tramite innerHTML.

    Questa è la funzione generica per istanziare un oggetto xmlhttp:
    codice:
    function ajax() 
    {
    	var xmlHttp;
    	try 
    	{
    		// Firefox, Opera 8.0+, Safari
    		xmlHttp = new XMLHttpRequest();
    		return xmlHttp;
    	}
    	catch (e) 
    	{
    	  // Internet Explorer
    		try 
    		{
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    			return xmlHttp;
    		}
    		catch (e) 
    		{
    			try 
    			{
    				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    				return xmlHttp;
    			}
    			catch (e) 
    			{
    				alert("Your browser does not support AJAX!");
    				return false;
    			}
    		}
    	}
    }
    che poi richiamo nelle pagine e amplio a seconda delle necessità:

    codice:
    	function caricaMenu(x) 
    	{
    		//chiamo la funzione ajax che mi restituisce l'oggetto xmlHttp
    		xmlHttp = ajax();
    		//e quindi mi scateno con le request
    		xmlHttp.onreadystatechange = function() 
    		{
    			if (xmlHttp.readyState == 4) 
    			{
    				document.getElementById('[ tag a mia scelta]').innerHTML = xmlHttp.responseText;
    			}
    		}
    		xmlHttp.open("POST",x,true);
    		xmlHttp.send(null);
    	}

  4. #4
    Sarebbe MOOOOLTO più semplice se usassi una libreria...

    mmm una cosa non mi è chiara: tu fai sostanzialmente ricaricare TUTTA la pagina (menu e dati) all'interno di un div senza far cambiare l'URL della pagina. Più o meno il funzionamento di un frame, giusto?
    I DON'T Double Click!

  5. #5
    Originariamente inviato da artorius
    Sarebbe MOOOOLTO più semplice se usassi una libreria...

    mmm una cosa non mi è chiara: tu fai sostanzialmente ricaricare TUTTA la pagina (menu e dati) all'interno di un div senza far cambiare l'URL della pagina. Più o meno il funzionamento di un frame, giusto?

    Diciamo che mi piace essere hardcore

    No non tutta la pagina. C'è un menù con varie voci; se selezioni due voci in quel menù si crea un altro menù relativo. Per intenderci, è come quando scegli la regione e ti compare un nuovo menù con tutte le varie città contenute in quella regione.
    That's all.

  6. #6
    scusa, ma perché non lo fai onChange sulla select piuttosto che sulle option? a quel punto modifichi solo il contenuto delle select, lasciando il resto dell'html.
    I DON'T Double Click!

  7. #7
    Originariamente inviato da artorius
    scusa, ma perché non lo fai onChange sulla select piuttosto che sulle option? a quel punto modifichi solo il contenuto delle select, lasciando il resto dell'html.
    Con l'onchange nel tag select funziona!
    Davvero bella dritta, anche se non mi spiego questa scelta di esclusione degli eventi dalle option (per Explorer).

    Ti ringrazio molto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.