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

    Classe dinamica con eval()

    Ecco l'HTML
    codice:
    <html>
    <head>
    
    <script type="text/javascript" src="script.js"></script>
    <link href="style.css" rel="stylesheet" type="text/css">
    
    </head>
    <body>
    <div id="container">
    
    [0] - href="ansa.it"
    
    [1] - href="http://html.it"
     
    [2] - href="http://google.com"
    
    
    </div>
    
    <div id="frame"> DIV id="frame"</div>
    
    </body>
    </html>
    Ecco script.js
    codice:
    window.onload= function assembla()
    {//assembla()
    var arrA = document.getElementsByClassName('anchor');
    var arrB = [];
    var objA = {};
    for(var i=0; i < arrA.length; i++) //attribuisce il valore 'index_' + i ad ogni abjA[i]
       {
       objA["" + i] = "index_" + i;
       }
    
    for(var i=0; i < arrA.length; i++)
       {//for
       arrB[i] = arrA[i].href; // attribuisce l'attributo href di ogni .anchor con indice i ad un elemento di un array con indice i
       alert(arrB[i]); //alerta ogni elemento dell'array sopra citato
       arrA.item(i).href = "javascript:void(0)"; //annulla il href dell'elemento dopo aver prelevato il href precedente
       }//for
       
    for(var i=0; i < arrA.length; i++) //assegna la stringa objA[i] al className di #frame
       {//for
       var evalvalue = []
       evalvalue[i] = "document.getElementById('frame').className = objA[" + i + "]"
       arrA[i].onclick = eval(evalvalue[i])
       }//for
    }//assembla()
    Il mio problema si presenta nell'ultimo ciclo: volevo fare in modo di assegnare a #frame la classe index_0 se si clicca sulla prima ancora, index_1 se si clicca sulla seconda e index_2 se si clicca sulla terza. Purtroppo con questo codice avviene un fatto strano: appena caricata la pagina #frame assume direttamente la classe index_2.

    Qualche buona anima potrebbe darmi una mano a capire in cosa sbaglio?

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    l' eval non ti serve
    o ti salvi da qualche parte "i"
    nel valore di un attributo (addirittura quell' href che sovrascrivi potrebbe richiamare direttamente la tua funzione e passare correttamente "i") o expando, o un data-qualcosa per poi andarlo a rileggere

    o ti serve una closure al volo
    arrA[i].onclick = (function(x){return function(){alert(x)}})(i);

    ciao

  3. #3
    Non ho capito cosa intendi: sono ancora abbastanza inesperto con il javascript.
    Riusciresti a spiegarmi un po' meglio magari facendo qualche esempio?

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.