Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Javascript, DOM e IE6

  1. #1

    Javascript, DOM e IE6

    Salve a tutti
    Sto scrivendo una funzione javascript che, letti da un file xml un testo e un numero, deve creare un div con dentro un link che, una volta cliccato, lanci una funzione javascript che deve riempire con del testo un altro div.

    Il codice è questo:
    codice:
    function foo()
    	{
    	var id = ;//il numero letto dal file xml
            var testo = ;//il testo letto dal file xml
            var el = document.createElement("div"); //il div che conterrà il testo cliccabile
    	var eltxt = document.createElement("div"); //il secondo div
    	eltxt.setAttribute("id", "text"+id); //do come id al secondo div il numero letto prima
    	var eanch = document.createElement("a"); //creo il link da mettere nel primo div
    	eanch.setAttribute("href","javascript:;");
    	eanch.setAttribute("onclick","boo("+id+");"); //cliccando sul link, deve partire la funzione boo(id) che riempie il secondo div col testo
    	eanch.appendChild(document.createTextNode(testo));
    	el.appendChild(eanch);
    	document.getElementById("elfaq").appendChild(el);
    	document.getElementById("elfaq").appendChild(eltxt);
    	}
    Tutto ciò funzione meravigliosamente con Firefox 1.5 sotto Win e con Safari sotto OSX 10.4
    Su IE6 sotto Windows però non funziona: se clicco sul link, non viene lanciata la funzione boo() e il secondo div rimane vuoto. Boo() è molto semplice, aggiunge solo il testo corrispondente al paramento al secondo div.
    Come mai?
    Avevo letto su una guida di html.it che IE6 supportava tutti questi metodi per la manipolazione del DOM, sbaglio qcosa io?

    Grazie

  2. #2

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    al posto di:
    eanch.setAttribute("onclick","boo("+id+");");

    metti:
    eanch.onclick = function(){boo(id);}
    Pietro

  4. #4
    Uhm, non funziona...
    Dice "proprietà o metodo non supportato dall'oggetto"...

    Provando invece con

    eanch.onclick = clicker;

    e definendo clicker come

    function clicker()
    {
    boo(id);
    }

    funziona, ma non prende l'id giusto: il pezzo di codice che ho riportato sopra è dentro ad un ciclo, e id mantiene il valore che prende nell'ultima iterazione del ciclo...

    Come faccio a fargli capire che deve prendere il valore di id di quell'iterazione del ciclo?

    Grazie mille cmq

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    perchè dici che non funziona? :master: Questa è la pagina di prova fatta col tuo codice, e funziona con IE6, Firefox 1.5 e Opera8
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Pagina senza titolo</title>
    
        <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    function Button1_onclick() 
    {
        foo();
    }
    
    function foo()
    {
        var id = 1;//il numero letto dal file xml
        var testo = "testo";//il testo letto dal file xml
        var el = document.createElement("div"); //il div che conterrà il testo cliccabile
        var eltxt = document.createElement("div"); //il secondo div
        eltxt.setAttribute("id", "text"+id); //do come id al secondo div il numero letto prima
        var eanch = document.createElement("a"); //creo il link da mettere nel primo div
        eanch.setAttribute("href","javascript:;");
        //eanch.setAttribute("onclick","boo("+id+");"); //cliccando sul link, deve partire la funzione boo(id) che riempie il secondo div col testo
        eanch.onclick = function(){boo(id);}
        eanch.appendChild(document.createTextNode(testo));
        el.appendChild(eanch);
        document.getElementById("elfaq").appendChild(el);
        document.getElementById("elfaq").appendChild(eltxt);
    }
    
    function boo(id)
    {
        alert(id);
    }
    
    // ]]>
        </script>
    
    </head>
    <body>
        <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
        <div id="elfaq"></div>
    </body>
    </html>
    Pietro

  6. #6
    Così sì, ma il codice mio è qcosa del tipo
    codice:
    function foo()
    {
    for (i = 0; i < 10; i++)
        {
        var id = i;//il numero letto dal file xml
        var testo = "testo";//il testo letto dal file xml
        var el = document.createElement("div"); //il div che conterrà il testo cliccabile
        var eltxt = document.createElement("div"); //il secondo div
        eltxt.setAttribute("id", "text"+id); //do come id al secondo div il numero letto prima
        var eanch = document.createElement("a"); //creo il link da mettere nel primo div
        eanch.setAttribute("href","java-script:;");
        //eanch.setAttribute("onclick","boo("+id+");"); //cliccando sul link, deve partire la funzione boo(id) che riempie il secondo div col testo
        eanch.onclick = function(){boo(id);}
        eanch.appendChild(document.createTextNode(testo));
        el.appendChild(eanch);
        document.getElementById("elfaq").appendChild(el);
        document.getElementById("elfaq").appendChild(eltxt);
        }
    }
    In questa situazione, boo() viene sempre richiamata con 9 come parametro, ovvero il valore che assume all'ultima iterazione del ciclo...

  7. #7
    Ce l'ho fatta!
    Prendendo spunto da questo post: http://forum.html.it/forum/showthrea...hreadid=808632

    ho aggiunto una funzione listenere e un oggetto in cui salvo il valore di id, e in questo modo i valori rimangono vivi e tutto funziona!

    Pietro, grazie per le tue indicazioni

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ho provato anche così e sembra funzionare

    //salvo in un attributo l'ID
    eanch.setAttribute("xyz", id);

    //imposto l'evento onclick
    eanch.onclick = boo;


    in boo() recupero l'id

    function boo()
    {
    alert(this.getAttribute("xyz"));
    }
    Pietro

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 © 2025 vBulletin Solutions, Inc. All rights reserved.