PDA

View Full Version : [Javascript] replaceChild non rimpiazza ma aggiunge l'elemento


__ZERO_UNO__
28-08-2011, 14:30
Ciao, sono da poco alle prese con Javascript e alcuni problemi che possono sembrare banali sono difficilmente valicabili per me. :)
Il problema è che la funzione che trovate in basso non rimpiazza l'elemento old ma ne aggiunge un'altro. Ho provato anche a cancellare l'elemento vecchio e appendere quello nuovo ma non funziona. Che posso fare?
Grazie mille.

PS Lo script è posto alla fine di body



Tableau.prototype.go = function(resultPlaceId)
{
var resultPlace = document.getElementById(resultPlaceId);
if (typeof resultPlace == undefined) return null;
var res = this.solve();
var str = 'Optimum found';
var div = document.createElement('div');
div.setAttribute('id', 'step_panel');
if (res == undefined)
{
h3 = document.createElement('h3');
h3.innerHTML = 'Wrong input!!';
h3.setAttribute('id', 'result_place');
div.appendChild(h3);
if (old == null)
resultPlace.appendChild(div);
else
{
old = old.parentNode.replaceChild(div, old);

}
return;
}
if (res == false)
str = 'Unlimited';

for (var s = 0; s < this.steps.length; s++)
{
div.appendChild(this.steps[s]);
}
var h3 = document.createElement('h3');
h3.setAttribute('id', 'result_place');
h3.innerHTML = str;
div.appendChild(h3);

var old = document.getElementById('step_panel');
if (old == null)
resultPlace.appendChild(div);
else
{
old = old.parentNode.replaceChild(div, old);

}
}

Pompolus
28-08-2011, 15:53
ma qui aggiungi il div 2 volte? Old dovrebbe essere sicuramente null visto che ancora non era stato dichiarato


if (old == null)
resultPlace.appendChild(div);
else
{
old = old.parentNode.replaceChild(div, old);

}
resultPlace.appendChild(div);
return;

__ZERO_UNO__
28-08-2011, 18:13
Hai ragione. Prima ho modificato il codice al volo e mi è sfuggito. Ma la cosa davvero strana è che con o senza quell'istruzione non cambia nulla.:confused:
Provando appare solo una volta l'<h3> wrong input.

Pompolus
29-08-2011, 03:04
ma te lo duplica solo quando res è undefined?

se così fosse credo che tu ti sia solo dimenticato di definire chi è old, pertanto lo trova sempre null.
Ti basterebbe aggiungere:


var old = document.getElementById('step_panel');


prima dell'if sul controllo di old. Diventerebbe quindi:



div.appendChild(h3);
var old = document.getElementById('step_panel');
if (old == null)
resultPlace.appendChild(div);
else
{
old = old.parentNode.replaceChild(div, old);

}

__ZERO_UNO__
29-08-2011, 03:08
Si, quello era uno dei bug della funzione. L'ho sistemato e ho sistemato anche un'altro fondamentale bug che avevo in un'altra funzione. Ora sono riuscito a farlo funzionare a dovere. Grazie mille a tutti voi dell'aiuto.

Se volete veder il risultato :D : http://technoviking.altervista.org/tableau.html

Pompolus
29-08-2011, 13:46
Si, quello era uno dei bug della funzione. L'ho sistemato e ho sistemato anche un'altro fondamentale bug che avevo in un'altra funzione. Ora sono riuscito a farlo funzionare a dovere. Grazie mille a tutti voi dell'aiuto.

Se volete veder il risultato :D : http://technoviking.altervista.org/tableau.html

di niente.

carino comunque il risultato, ma avrei messo le tabelle del risultato non modificabili dall'utente.

Ciao ciao

__ZERO_UNO__
29-08-2011, 14:17
Vero. Lo metto in lista con le cose da aggiungere.
:)


PS Fatto! E grazie per il tuo parere.