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

    Collegare array multi-dimensionale con array normale

    In un test a risposta multipla vorrei mostrare (in una nuova pagina) i risultati sotto forma di grafico a barre.
    Premesso che non voglio usare programmi lato server, ho adattato degli script che mi risolvono la prima parte (mandare oggetti da una pagina all'altra) e l'ultima parte (creare un grafico con i risultati in percentuale).
    Mi serve un sistema per legare le due cose.
    Nella pagina col questionario c'è questa funzione
    codice:
    function nextpage() {
    // Mando totale 1,2,3 etc a elemento MyValue del seguente form.
    window.location.href = "send.html?MyValue.value='"+document.getElementById('totale1').value+
    "'&MyTest.value='"+document.getElementById('totale2').value+
    "'&MyTesta.value='"+document.getElementById('totale3').value+"'"
    Nella pagina ricevente c'è una prima funzione che crea un array di oggetti col nome MySearch, tipo questo
    myValue=AEIOU
    Da lì, tramite un loop for e un eval vengono restituiti totale1, totale2 etc
    codice:
    function getFromSearch() {
    var x = 0
    mySearch = location.search.substr(1).split("&")
    for (x=0;x<=mySearch.length;x++) {
    eval("document.forms.myNewForm."+mySearch[x])
    }
    }
    e i risultati sono mostrati in 3 text box. Fin qui tutto bene.

    Ho trovato infine uno script che prende i dati da un array e li mostra sotto forma di grafico.
    Il problema è che si parte da un array multi-dimensionale!!!
    codice:
    //DEFINE GRAPH VALUES [Item name, absolute value]
    var graphx=new Array()
    graphx[0]=["RAI1",60]
    graphx[1]=["Canale5",24]
    graphx[2]=["Sky",52]
    La mia domanda è: anzichè inserire "a mano" i dati nell'array come si fa a creare due array
    uno che contenga il nome dell'item (Rai1,Canale5...)
    e l'altro che contenga IN AUTOMATICO i valori provenienti da getFromSearch()
    e riunirli in un unico array multi-dimensionale
    var graphx=new Array()
    da lì in avanti c'è la funzione che crea il grafico...

    Concettualmente mi sembra semplice, ma non so trovare una soluzione. PLEASE HELP!

  2. #2
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    L' Array bi-dimensionale graphx viene allora "compilato" dalla funzione function combine_arrays() prendendo gli articoli da due distinti Array mono-dimensionali. A questo livello, i due Array di partenza devono già esistere, siano essi compilati manualmente come nell' esempio, o compilati dal programma.
    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Merge Arrays</title>
    
    <script type="text/javascript">
    
     var broadcaster = new Array();
         broadcaster[0] = "RAI1";
         broadcaster[1] = "Canale5";
         broadcaster[2] = "Sky";
    
     var score = new Array();
         score[0] = 60;
         score[1] = 24;
         score[2] = 52;
    
     var graphx = new Array();
    
    
    			function combine_arrays(){
    
    				for (i=0; i<broadcaster.length; i++){
    				
    				    graphx[i] = new Array( broadcaster[i], score[i] );
    				};
                                         
    				document.forms[0].area.value = graphx;
                                       
    			}
    
    </script>
    </head>
    <body>
    
    <form>
    
     <textarea name="area" cols="80" rows="14"></textarea>
    
     
    
     <tt>Fondi i due array in uno bi-dimensionale:</tt>
     <input value="esegui" type="button" onclick='combine_arrays();'>
    		
    </form>			
    </body>
    </html>
    Se ora modifichi l' istruzione document.forms[0].area.value = graphx[1][0]; accedi al dato "Canale5"
    a 24 con graphx[1][1]

  3. #3
    Enzaccio, grazie per il tuo contributo.
    La fusione dei due array avviene correttamente, però come tu dici i dati dei due array di partenza devono già esistere e col tuo metodo non saprei come ottenerli "dinamicamente".
    Nel frattempo, indagando su location.search ho trovato questo tutorial ricavando una soluzione un po' grezza ma che stranamente funziona.
    Infatti i dati che ricevo dalla pagina del questionario mi aprono una url di questo tipo:
    codice:
    http://qst.html?rai1=20&canale5=12&sky=10
    Quindi, in maniera sicuramente poco elegante, ho usato:
    codice:
    var qst=location.search.substr(1);// assegna la stringa ad una variabile ed elimina il ?
    var dati=new Array()
    dati=qst.split("&"); //spezza la stringa ad ogni separatore &, restituendone i pezzi in un array
    var dato1 = dati[0].substr(dati[0].indexOf("=")+1); //ricreo la var "rai1=9" e assegno i valori letti
    var dato2 = dati[1].substr(dati[1].indexOf("=")+1); //ricreo la var "canale5=12" e assegno i valori letti
    dati[0]=["Rai1",dato1]; // ottengo dati per l'array bi-dimensionale
    dati[1]=["Canale5",dato2]; // come sopra
    In pratica comunque ottengo quello che serve a costruire il grafico (che qui sopra ho limitato a due variabili).
    Dato che l'array sarà molto più lungo (a 13 variabili e non a 2) sicuramente un FOR LOOP aiuterebbe, ma non sono capace di scriverlo... quello che ho ottenuto è merito della fortuna dei principianti...

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.