Visualizzazione risultati 1 fino 9 di 9

Discussione: Test in javascript

  1. #1
    L'avatar di cpiupiu
    cpiupiu non è connesso Utente
    Data registrazione
    28-09-2003
    Messaggi
    161

    Predefinito Test in javascript

    ciao a tutti ho bisogno di una mano per realizzare un test.

    Il form è generato (dopo vari controlli che ho impostato) da questo codice, che si ripete più volte per ogni domanda che voglio visualizzare:

    Codice:
    document.write ("<form name='ilform'><table align='center' width='250' border='1' bordercolor='#cccccc'>"); //creazione della tabella con le domande
             document.write ("<tr>");
             document.write ("<td colspan='2' style='background-color: #000099;'>");
             document.write ("<font color='#FFFFFF'><b>Domanda numero " + (k + 1) + "</b></font>");
             document.write ("</td>");
             document.write ("</tr>");
             document.write ("<tr>");
             document.write ("<td>" + StringaSelXml.documentElement.childNodes(k).childNodes(0).text + "</td>");
             document.write ("</tr>");
             document.write ("<tr>");
             document.write ("<td><INPUT TYPE='radio' NAME=", k, " VALUE=1>" + StringaSelXml.documentElement.childNodes(k).childNodes(1).text + "</td>");
             document.write ("</tr>");
             document.write ("<tr>");
             document.write ("<td><INPUT TYPE='radio' NAME=", k, " VALUE=2 >" + StringaSelXml.documentElement.childNodes(k).childNodes(2).text + " </td>");
             document.write ("</tr>");
             document.write ("<tr>");
             document.write ("<td><INPUT TYPE='radio' NAME=", k, " VALUE=3 >" + StringaSelXml.documentElement.childNodes(k).childNodes(3).text + " </td>");
             document.write ("</tr>");
             document.write ("<tr>");
             document.write ("<td><INPUT TYPE='radio' NAME=", k, " VALUE=4 >" + StringaSelXml.documentElement.childNodes(k).childNodes(4).text + " </td>");
             document.write ("</tr>");
    		 document.write ("<tr>");
             document.write ("<td><input type=button value='Controlla il test' onClick=ControllaTest(ilform)></td>");
             document.write ("</tr>");
             document.write ("</table>");
             document.write ("</form><br>");
    (dove k è l'indice di un ciclo for e le funzioni StringaSelXml.documentElement.... servono per la lettura da un file xml)

    Il problema nasce dal fatto che non so come eseguire il controllo sulle risposte (in pratica dopo aver visualizzato la domanda e le risposte, non so come controllare quale casella viene spuntata e se vengono spuntate tutte, e infine fornire un risultato)...
    Spero possiate aiutarmi (anche suggerendo lievi modifiche al codice sopra, basta che si mantenga la visualizzazione coi bottoni radio).
    Grazie!
    Ultima modifica di cpiupiu : 12-10-2004 alle ore 15.34.46
    Risorse gratuite sul C++
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

  2. #2
    L'avatar di cpiupiu
    cpiupiu non è connesso Utente
    Data registrazione
    28-09-2003
    Messaggi
    161

    Predefinito

    proprio nessun suggerimento?
    Risorse gratuite sul C++
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

  3. #3
    Data registrazione
    27-03-2003
    Messaggi
    235

    Predefinito

    Avevo un controllo simile sui form.....controllava che venissero riempiti i campi obbligatori e per uno dei campi controllava che non venissero usati certi nomi che avevo vietato....
    non so, se sei in grado di adattarlo, posso provare a spedirtelo....domani però, oggi non posso usare il mio pc e su questo che sto usando non ho il file che intendo
    "La fortuna di diventare me stessa e grazie a ciò più utile agli altri - ho vissuto anche questo" Cassandra (C. Wolf)
    ::: my freedom :: my strenght :: my wings :::

  4. #4
    L'avatar di cpiupiu
    cpiupiu non è connesso Utente
    Data registrazione
    28-09-2003
    Messaggi
    161

    Predefinito

    grazie, ma forse ho risolto il problema.... se la soluzione che ho trovato è furba magari la posto. :grin:
    Risorse gratuite sul C++
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

  5. #5
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Ok bene facci sapere (buono così evito di rileggere il problema che sinceramente non ho capito bene, letto poco a fondo).

    In ogni modo vedo alcune cose migliorabili del codice javascript:
    1) mettere un document.write per ogni riga di codice javascript non porta alcun beneficio perché il codice viene comunque prodotto tutto appiccicato senza a capo... dunque a questo punto dovresti scrivere document.writeln così ogni write lo scrive su una singola riga di output automaticamente mandata a capo, oppure dovresti mettere un \n ad ogni fine stringa (stesso effetto, dipende da quale ti piace di più).

    2) forse document.write supporta la concatenazione di stringhe anche passando più parametri come fai tu nel punto:
    "... NAME=", k, " VALUE ..."
    penso di sì altrimenti ti saresti accorto di qualche errore (non ho controllato la guida), comunque visto che usi il + per concatenari altri valori perché usi quelle virgole per k?
    Può darsi che mi sfugga qualcosa, dunque chiedo per curiosità più che per pignoleria o altro.
    Per es. io farei:
    ...NAME=\"" + k +"\" VALUE...


    Anzi ora che ho rivisto il post ho anche capito la domanda che facevi:
    per sapere le risposte date ti conviene (per ogni ciclo diverso) mettere qualcosa accanto a quell'anonimo "k", tipo:
    Codice:
    document.write ("<td><INPUT TYPE='radio' NAME=\"" + q +"_"+ k +"\" VALUE=1>"
    dove q sta per l'indice di ogni domanda diversa, dunque per gli elementi diversi della prima domanda viene fuori:
    0_0
    0_1
    0_2
    0_3

    per la seconda domanda:
    1_0
    1_1
    1_2
    1_3

    capito?

    Più che una "soluzione furba" direi che è la classica soluzione, perché sarebbe bene che ogni gruppo di radio buttons diverso (come nel tuo caso gruppi da 4) abbia un nome diverso, altrimenti li vede come un gruppone enorme e tra l'altro i radio sono a selezione signola esclusiva: se selezioni un gruppo di 4, poi vai al secondo ti toglie la selezione del primo gruppo se tutti i radio hanno lo stesso NAME.

    Fammi sapere ciao.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  6. #6
    L'avatar di cpiupiu
    cpiupiu non è connesso Utente
    Data registrazione
    28-09-2003
    Messaggi
    161

    Predefinito

    Grazie per i suggerimenti!
    Allora partiamo dalla "mia" soluzione :
    Codice:
    document.write ("<td><INPUT TYPE='radio' NAME=" + k + " VALUE=1 onClick='aggiorna(name,value)'>" + StringaSelXml.documentElement.childNodes(k).childNodes(1).text + "</td>");
    la soluzione consiste nell'utilizzare una opportuna funzione "aggiorna" che mi passa i parametri relativi a numero domanda e valore risposta una volta cliccato. Questi parametri li vado a mettere in un array e li utilizzo così a mio piacere.
    Altre soluzioni non ne ho trovate perchè la nuova pagina creata contiene come unici valori quelli del form ed è quindi impossibile ripescare quelli del file js (o meglio è possibile richiamandolo nella nuova pagina ma vengono azzerati)

    Per quanto riguarda il writeln devo dire che mi pare una buona idea (ma se ho capito bene il codice andrebbe messo tutto di seguito fino alla chiusura della parentesi?)... proverò!

    Per quanto riguarda l'uso di virgole o "+" credo che sia indifferente (perchè non risultavano errori) ma alla fine ho optato per il +!

    Anche per il k non ho riscontrato problemi perchè fa parte di un ciclo for in cui lo stesso valore non si ripete mai e quindi ogni gruppo di domande è visto singolarmente.
    Risorse gratuite sul C++
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

  7. #7
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Uhm.. così a parole non è che riesca a seguire tanto.. comunque per forza un array devi usare per controllare le scelte?
    Non ti basterebbe andare a fare un loop su tutti gli elements[] dell'oggetto form in questione?
    oppure ancora più comodo fai una cosa del genere sfruttando la mitica funzione eval() la conosci? è una bomba:

    Codice:
    aradio = eval('document.ilform.'+ j +'['+ i +']');
    isselected = aradio.checked;  //se true = scelto
    questo lo fai in un doppio ciclo: for j (per i gruppi di opzioni) .. e for i (per le singole opzioni di ciascun gruppo)
    Ovviamente controlli lo stato checked e ci fai quel che devi fare..

    Se non capisci (ma penso di si) la prima riga: in aradio va a finire un riferimento al singolo oggetto radio -facente parte del radiogroup il quale è un ARRAY dunque per raggiungere il singolo elemento fai document.nomeform.grupporadio[0] ..[1] ..[2] e ..[3]
    Ho incasinato troppo le idee? dai no che capisci! e poi è "robba bona" questa

    Citazione Originalmente inviato da cpiupiu
    Per quanto riguarda il writeln devo dire che mi pare una buona idea (ma se ho capito bene il codice andrebbe messo tutto di seguito fino alla chiusura della parentesi?)... proverò!
    No no...
    allora se vuoi usare il writeln lasci tutto così com'è e aggiungi solo il "..ln" ai write e va tutto perfetto a capo come dici tu.
    "Tutto di seguito" intendevo che viene di filato il codice -generato con le write- proprio così come lo hai scritto adesso, più che altro è solo questione di pulizia ma male non fa.

    Citazione Originalmente inviato da cpiupiu
    Anche per il k non ho riscontrato problemi perchè fa parte di un ciclo for in cui lo stesso valore non si ripete mai e quindi ogni gruppo di domande è visto singolarmente.
    No scusami, hai ragione tu.. mi ero rimbambito.. non c'era bisogno infatti basta solo il k di suo che ogni volta viene incrementato dunque ogni gruppo ha il suo nome a parte..
    altra cosa.. da programmatore Java non utilizzerei mai come variabile un semplice numero.. (i nomi di variabili non possono cominciare con un numero) ed è possibile (non ricordo) che anche a Javascript non piaccia troppo la cosa.. io nell'indecisione, ma anche per la solita pulizia, metterei una letteruzza prima del valore k tipo una "r" (di radio) dunque vengono nomi come r0, r1, r2... penso sia consigliabile.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  8. #8
    L'avatar di cpiupiu
    cpiupiu non è connesso Utente
    Data registrazione
    28-09-2003
    Messaggi
    161

    Predefinito

    Mediterò sui tuoi suggerimenti... :grin:
    Ti confesso che non avevo considerato la funzione eval()... ho iniziato da un paio di settimane a programmare in javascript e non ho una grande padronanza delle funzioni!
    Grazie!
    Risorse gratuite sul C++
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

  9. #9
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    eval() è favolosa,
    praticamente "valuta" una stringa -che di solito è composta da variabili varie- e se ha successo ti ritorna un riferimento all'oggetto (o semplicemente esegue quel che hai scritto, ma è più frequente usarlo per i riferimenti a oggetti) altrimenti undefined mi sembra.

    Spesso è l'unica soluzione vincente (o che ti salva il culetto) in situazioni un po' da vicolo cieco.

    Dimenticavo:
    non puoi "limitarti a meditare" su ciò che è scritto su... sei praticamente obbligato ad eseguire quegli ordini.. forse non si era capito

    (scherssso :grin:)
    Ultima modifica di heracleum : 15-10-2004 alle ore 12.41.22
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •