Gentili utenti di questo forum,
sto preparando un progetto, per un esame e sono bloccato perché non riesco a chiarire alcune cose.
Spero possiate aiutarmi. Ora ve lo spiego.
Ho creato un sito in HTML, dedicato al classicismo viennese. Funziona così.
La pagina Hmtl espone dei campi di testo, dove è possibile inserire nome del compositore, titolo dell'opera, catalogazione e anno di composizione. Una volta inseriti questi dati, cliccando sul pulsante aggiungi, vengono visualizzate le informazioni aggiunte. Poiché vengono usati degli array.
Fin qui tutto ok, funziona tutto.
I problemi vengono esposti alla fine del codice JS.
Ecco il Codice dell'interfaccia HTML e poi del JS in rubrica:
HTML
<form action="">
<input type="text" name="n"/> Nome compositore
<input type="text" name="o"/> Titolo opera
<input type="text" name="c"/> Catalogazione
<input type="text" name="a"/> Anno
<input type="button" value="Aggiungi un'opera, inserendo titolo, catalogazione e anno" onclick="
aggiungi(n, o, c, a, out);
"/>
<input type="button" value="Cerca un opera (Titolo, catalogazione, anno esatti)" onclick="
ricesatta(n, o, c, a, out);
"/>
<input type="button" value="Cerca un opera (Approssimativamente)" onclick="
riceappr(n, o, c, a, out);
"/>
<textarea rows="10" cols="50" readonly="readonly" name="out"></textarea>
<input type="button" value="Visualizza la catalogazione" onclick="
visualizzaCat(out);
"/>
<input type="button" value="Cancella" onclick="
cancella();
"/>
ED ECCO IL CODICE IN JAVASCRIPT CHE MI FA FUNZIONARE LA RUBRICA
// Variabili globali
var numeroElem = 0;
var nome = new Array();
var opera = new Array();
var catalogazione = new Array();
var anno = new Array();
// pulsante aggiungi
function aggiungi(n, o, c, a, out)
{
nome[numeroElem] = n.value;
opera[numeroElem] = o.value;
catalogazione[numeroElem] = c.value;
anno[numeroElem] = a.value;
numeroElem++;
out.value = "Inserita l'opera di" + nome[numeroElem - 1] +
'\n\n' + visualizza(numeroElem - 1);
o.value = '';
c.value = '';
a.value = '';
}
// pulsante ricesatta
function ricesatta(n, o, c, a, out)
{
var j = ricerca(n.value, o.value, c.value, a.value);
if (j < numeroElem)
{
out.value = "Trovata l'opera" +
'\n\n' + visualizza(j);
}
else
{
out.value = "Questa opera che cerchi non \u00E8 scritta esattamente come nel catalogo o forse non \u00E8 stata ancora aggiunta. Prova a cercarla con il pulsante di ricerca approssimata. Se non esiste, infine, aggiungila!"
}
}
// pulsante riceappr
function riceappr(n, o, c, a, out)
{
var j = riceApproxim(n.value, o.value, c.value, a.value);
if (j < numeroElem)
{
out.value = "Trovata l'opera" +
'\n\n' + visualizza(j);
}
else
{
out.value = "Probabilmente l'opera non fa parte del catalogo. Aggiungila!"
}
}
//pulsante visualizzaCat
function visualizzaCat(out)
{
var mex = "La catalogazione contiene " + numeroElem;
if(numeroElem == 1)
{
mex += " opera";
}
else
{
mex += " opere";
}
for (var i = 0; i < numeroElem; i++)
{
mex += '\n\n' + visualizza(i);
}
out.value = mex;
}
// pulsante cancella
function cancella()
{
numeroElem = 0;
var nome = new Array();
var opera = new Array();
var catalogazione = new Array();
var anno = new Array();
}
function visualizza(j)
{
return 'Il compositore \u00E8 ' + nome[j] +
'\nLe opere sono ' + opera[j] +
'\nLe rispettiva catalogazioni ' + catalogazione[j] +
'\nIl rispettivo anno di composizione ' + anno[j];
}
function ricerca(n, o, c, a)
{
var j = 0;
while ((j < numeroElem) &&
!uguale(j, n, o, c, a))
{
j++;
}
return j;
}
function uguale(j, n, o, c, a)
{
return (n == ' ' || nome[j] == n) &&
(o == ' ' || opera[j] == o) &&
(c == ' ' || catalogazione[j] == c)
(a == ' ' || anno[j] == a);
}
function riceApproxim(n, o, c, a)
{
var j = 0;
while ((j < numeroElem) &&
!simile(j, n, o, c, a))
{
j++;
}
return j;
}
function simile (j, n, o, c, a)
{
return (n == ' ' || nome[j].indexOf(n) >= 0) &&
(o == ' ' || opera[j].indexOf(o) >= 0) &&
(c == ' ' || catalogazione[j].indexOf(c) >= 0) &&
(a == ' ' || anno[j].indexOf(a) >= 0);
}
fin qui tutto ok. La rubrica funziona e non ci sono problemi di isterismo.
Però, per la legge di Murphy, sorgono altri due problemi.
1) Dal momento che i compositori che voglio selezionare sono solo 3 (Haydn, Mozart e beethoven), mi converrebbe applicare un tag select, nell'HTML per selezionare uno dei tre artisti e poi visualizzare le opere ad essi assegnate. Ma come faccio a operare con un select, poi, nel Javascript?
Cioè, in parole povere, come faccio a farmi uscire fuori le informazioni relative a quel compositore, una volta selezionato? E una volta selezionato un compositore, come faccio a impostare tutta l'interfaccia e le informazioni che ne verranno visualizzate in modo che sia nel contesto del compositore selezionato?
2) Il progetto prevede un inserimento del XML e del Dom ad esso associato. Quindi dovrei preparare un documento XML con una serie di informazioni, per esempio:
<compositore nome="Mozart">
<opera titolo="concertino" catalogazione="K433" anno="1761"></opera>
<opera titolo="arpe e violini" catalogazione="K432" anno="1762"></opera>
<opera titolo="violoncello" catalogazione="K412" anno="1763"></opera>
</compositore>
come faccio a farmi visualizzare le informazioni del documento XML nel campo di testo del mio HTML?
E ancora più difficile, come faccio ad applicare una funzione di ricerca approssimata(come si legge nel mio codice) per cercare proprio quel tag, ricercando dai vari attributi, come ad esempio titoòlo, catalogazione o anno?
VI ringrazio per l'aiuto che mi darete, spero.
P.S
Devo consegnare il progetto entro martedì mattina, per cui sono in carenza di tempo. VI sarei molto grato, se vi fosse una risposta abbastanza immediata.!
Grazie ancora,
michele