Ce l'ho fatta!!!
Certo che di errori se ne fanno
( siamo al limite de: "se riuscite a leggere anche questo non avete bisogno di occhiali!" ).
Ecco gli errori principali che ho fatto
(in rosso gli errori e in verde le modifiche )
codice:
a.onclick = function() {
document.getElementById(id).value = a.childNodes[0].nodeValue;
document.getElementById(id).value = document.getElementById(this.id).childNodes[0].nodeValue;
s.style.display = 'hide';
document.getElementById('suggeritore').style.display = 'none';
}
che poi hide per la proprietà "display" non si usa, semmai none ma questo era un errore secondario che avrei visto in un secondo tempo.
in realtà mi sono reso conto che è facile farsi indurre in errore programmando proprio perché non si pensa "al codice che verrà". quando scrivevo ad a in luogo di document.getElement..... mi riferivo alla variabile a che nello script aveva creato l'ancora ( document.createElement('a'); ) ovviamente il riferimento in quel contesto era sbagliato ma non capivo in quanto mi ritornava comunque un riferimento, seppur sbagliato, tra quelli mostrati, quindi non mi ero accorto dell'errore.
Un punto a parte meritano quegli id che si vedono segnati in rosso ma non ho ancora spiegato!
Ebbene il codice finale alla fine è risultato differente perché ho dovuto tenere conto anche della cella attiva (identificata con un numero progressivo), ognuna aveva l'opportunità di avere un elemento suggeritore, e quindi ogni suggeritore doveva essere identificato in modo univoco da un id formato da un nome convenzionale e un numero progressivo, ma non solo, anche la prima parte quella document.getElementById(id).value = document.getElementById(this.id).childNodes[0].nodeValue; doveva avere un elemento identificativo univoco che la identificasse, ogni volta differente, questo ha comportato il dover creare una variabile globale che portasse ogni volta l'ID passato alla funzione in fase di creazione dell'intera cella.
Ecco il codice completo risultante:
codice:
function cancellaNodi(el) {
if (el.hasChildNodes()) { // rimuove i nodi eventualmente presenti
for (var i = 0, n = el.childNodes.length; i < n; i++) {
el.removeChild(el.childNodes[i]);
}
}
}; // cancellaNodi()
var idCorrente = 0;
function creaLista(parola, id) {
var o = new assegnaXMLHttpRequest();
o.open("post", "suggeritore.php", true);
o.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
o.onreadystatechange = function() {
if (o.readyState == 4) {
if (o.status == 200) {
var ret = JSON.parse(o.responseText),
s = document.getElementById('suggeritore'+id),
ul = document.createElement('ul'),
list = new Array();
idCorrente = id;
cancellaNodi(s);
for (var i = 0, n = ret.length; i < n; i++) { // Crea la lista con i nodi
list[i] = document.createElement('li');
var a = document.createElement('a');
a.appendChild(document.createTextNode(ret[i].nome));
a.id = 'a'+i;
a.setAttribute('href', 'javascript:void()');
a.onclick = function() {
document.getElementById(idCorrente).value = document.getElementById(this.id).childNodes[0].nodeValue;
var el = document.getElementById('suggeritore'+idCorrente);
cancellaNodi(el);
el.style.display = 'none';
return false;
}
list[i].appendChild(a);
ul.appendChild(list[i]);
}
s.appendChild(ul);
s.style.display = 'block';
} else if (o.status == 204) {
alert('File remoto non trovato');
}
}
};
var params = 'parola=' + parola + '&time=' + Math.random();
o.send(params);
}; // creaLista()
Notare anche la cancellaNodi() che elimina i nodi vecchi che se no rimarrebbero in memoria una volta non più necessari.