Newsgroup: it.comp.lang.javascript
Titolo: Edit in place con AJAX

Un saluto a tutti!
Sono niubbo di JS e di conseguenza anche di AJAX ma sto ugualmente cercando 
di inserire nelle mie pagine internet la funzione di "edit in place"; nello 
specifico sto utilizzando questo "semplice" script (magari a qualcuno torna 
utile):
http://free-script.it/post/Script_Ajax_Edit_in_place_e_modifica_dati_in_loco-38.htm
Ma veniamo al problema che non riesco a risolvere.
Lo script � studiato per estrapolare informazioni strutturate in questo 
modo:
<form name=dinamicform>
    <div id=...>valore
    </div>
</form>
Le informazioni vengono recuperate in questa riga dello script:
eval("document.forms.dinamicform."+getvar+".value");
All'interno di <form></form> posso mettere tutti i div che voglio (con id 
differente ovviamente) e tutto funziona alla perfezione.
Ma se per esempio il div lo inserisco all'interno di una tabella lo script 
non mi recupera pi� il valore.
Intendo una cosa di questo tipo:
<form name=dinamicform>
    <table>
        <td>
            <div id=...>valore
            </div>
        </td>
    </table>
</form>
Suppongo che il problema derivi dalla sintassi errata della formula *** 
eval("document.forms.dinamicform."+getvar+".value"); *** ma non arrivo a 
capire come riuscire a modificarla per farla funzionare. Potete aiutarmi?
Grazie,
Ken 

 eval("document.forms.dinamicform."+getvar+".value");
quanto sopra estrae (e dove li mette?) valori di un tag input o select =>
*non* estrae scritte da dei div ...
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 *non* estrae scritte da dei div ...
Anche qu� ho semplificato, ecco la parte di script incriminata:
http_request.open('POST', '
http://ubuntu/edit.php
', true);
http_request.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
postvar="campo="+getvar+"&value="+eval("document.forms.dinamicform."+getvar+".value");
http_request.send(postvar);
Dopodich� ci sono altre funzioni che hanno per� utilizzi differenti.
   function scrivi(getvar) {
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
  document.getElementById(getvar).innerHTML = "<a
href=\"javascript:void(null);\"
onclick=\"change(this,'"+getvar+"')\">"+eval("document.forms.dinamicform."+getvar+".value")+"</a>";
  document.getElementById("result").innerHTML = http_request.responseText;
            } else {
                alert('There was a problem with the request.');
            }
        }
    }
    function change(link,textname,type){
         //link.innerText e link.text sono stessa cosa, c'� differenza tra
ie e firefox
 if(link.innerText){testovecchio=link.innerText}else{testovecchio=link.text}
 //riscrivo il contenuto del div
  if(type == 1){
   document.getElementById(textname).innerHTML="<textarea rows=3
wrap='physical' name='"+textname+"' style='width:
100%;'>"+testovecchio+"</textarea><br><input type='button' value='ok'
onclick=\"makeRequest(\'"+textname+"\')\">";
     }else{
   document.getElementById(textname).innerHTML="<textarea rows=3
wrap='physical' name='"+textname+"' style='width:
100%;'>"+testovecchio+"</textarea><br><input type='button' value='ok'
onclick=\"makeRequest(\'"+textname+"\')\">";
     }
 }
Ciao,
Ken 

 postvar="campo="+getvar+"&value="+eval("document.forms.dinamicform."+getvar+".value");
continuo a sostenere che quanto sopra non funziona perch� non esiste un tag
con name "getvar" nella form, e soprattutto anche se esistesse non avrebbe
una propriet� value.
boh, sentiamo gli altri
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
									B.M.

 continuo a non vedere input o select ...
Una volta effettuato il doppioclick (onDblclick) viene richiamata la
funzione change() che avevo postato nel post precedente:
function change(link,textname,type){
    if(link.innerText){testovecchio=link.innerText}else{testovecchio=link.text}
    document.getElementById(textname).innerHTML="<textarea rows=3
    wrap='physical' name='"+textname+"' style='width:
    100%;'>"+testovecchio+"</textarea><br><input type='button' value='ok'
    onclick=\"makeRequest(\'"+textname+"\')\">";
 }
Qu� puoi vedere l'input che dicevi, in realt� si tratta di una textarea.
Una volta cliccato sul bottone "ok" viene richiamata la funzione
makerequest() in fondo alla quale puoi vedere la variabile la linea di
codice
postvar="campo="+getvar+"&value="+eval("document.forms.dinamicform."+getvar+".value");
che � quella che recupera il valore dalla textarea.
   function makeRequest(getvar) {
        http_request = false;
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                //http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }
        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = function(){
  scrivi(getvar);
 }
        http_request.open('POST', '
http://ubuntu/edit.php
', true);
 http_request.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
 postvar="campo="+getvar+"&value="+eval("document.forms.dinamicform."+getvar+".value");http_request.send(postvar);    }Infine lo script riscrive il contenuto deldiv:    function scrivi(getvar) {        if (http_request.readyState == 4){            if (http_request.status == 200) {document.getElementById(getvar).innerHTML ="<ahref=\"javascript:void(null);\"onclick=\"change(this,'"+getvar+"')\">"+eval("document.forms.dinamicform."+getvar+".value")+"</a>";document.getElementById("result").innerHTML =t.responseText;            } else {                alert('There was aproblem with the request.');            }        }    }Intanto graziecomunque per la disponibilit�...Ken

 boh, sentiamo gli altri
Ho dato un'occhiata rapida allo script, quindi tiro conclusioni
affrettate
l'input viene creato al volo (on the fly):
document.getElementById(textname).innerHTML="<input type='text'
name='"+textname+"' value='"+testovecchio+"'> <input type='button'
value='ok' onclick=\"makeRequest(\'"+textname+"\')\">";
il problema, probabilmente è che l'input si trova ad un livello
inferiore, mentre la chiamata viene effettuata ad un livello
immediatamente prima dell'input.
Conviene controllare il DOM ed osservare le nidificazioni