Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Perchè funziona solo con l'alert?

    Salve a tutti. Ho creato una tabella dinamica javascript dove premendo un bottone vengono aggiunte tre righe per volta.
    Ogni riga contiene una select. Il problema è che le righe vengono create, ma viene caricata solo la select dell'ultima riga.
    Le select vengono create mediante la stessa funzione che richiama un codice esterno php (uso ajax). Come ho potuto verificare, la funzione'mostraInfo(par1, par2, par3)' viene richiamata in tutti i casi, ma soltanto nel caso della terza riga effettua il collegamento al documento preleva_dati.php.
    Il fatto strano è che se metto un semplice alert dopo aver creato ogni riga, funziona tutto alla perfezione, poichè vengono caricate le tre righe con le tre select.

    La prima funzione richiamata è add_member(id_table, cod_gruppo, inizio)

    codice:
    <script language="javascript">  	
    var var_fine; 	
    var id_indice; 	 	
    function  mostraInfo(cod_gruppo, inizio, str) 	
    { 		
      var_fine=GetXmlHttpObject();  		
      if (var_fine==null) 		
      { 			
        alert ("Browser does not support HTTP Request"); 			
        return; 		
      } 		
      var url="preleva_dati.php";	
      url=url+"?cod_gruppo="+cod_gruppo; 
      url=url+"&inizio="+inizio; 	
      url=url+"&str="+str; 		
      var_fine.onreadystatechange=stateChanged; 		
      var_fine.open("GET",url,true); 
      var_fine.send(null); 		 	
    }  	
    function stateChanged() 	
    { 		
      if (var_fine.readyState==4) 		
      { 
        document.getElementById(id_indice).innerHTML=var_fine.responseText; 
      } 	
    }  	
    function GetXmlHttpObject() 	
    { 		
      if (window.XMLHttpRequest) 		
      { 			// code for IE7+, Firefox, Chrome, Opera, Safari 			
         return new XMLHttpRequest(); 		
      } 		
      if (window.ActiveXObject) 		
      { 			// code for IE6, IE5 			
         return new ActiveXObject("Microsoft.XMLHTTP"); 		
      } 		
      return null; 		 	
    }  	
    
    var index = 0; 	 	
    
    function add_member(id_table, cod_gruppo, inizio)  
    
    { 		  		
    var tbody = document.getElementById 		
    (id_table).getElementsByTagName("TBODY")[0];  		 		
    var row = document.createElement("TR"); 	 		
    
    //**********PRIMA RIGA 		
    var td1 = document.createElement("TH"); 
    td1.appendChild(document.createTextNode("Seleziona componente")); 	
    row.appendChild(td1); 		 		
    var td2 = document.createElement("TD"); 		
    var cellText = document.createElement("div"); 		
    index++; 		
    id_indice = "dati"+index;        
    cellText.setAttribute("id", id_indice); 		
    td2.appendChild (cellText); 		
    row.appendChild(td2); 		 		
    mostraInfo(cod_gruppo, inizio, "elenco"); 
    tbody.appendChild(row); 		
    alert("questo alert permette di far funzionare la riga");  //se tolgo questo alert, non viene caricata la select
    
    //**********SECONDA RIGA
    row = document.createElement("TR"); 		
    td1 = document.createElement("TH"); 		
    td1.appendChild(document.createTextNode("Anno inizio collaborazione")); 
    row.appendChild(td1); 		 		
    td2 = document.createElement("TD"); 		
    cellText = document.createElement("div"); 		
    index++; 		
    id_indice = "dati"+index;         
    cellText.setAttribute("id", id_indice); 		
    td2.appendChild (cellText); 		
    row.appendChild(td2);  		
    mostraInfo(cod_gruppo, inizio, "inizio"); 		
    tbody.appendChild(row); 		
    alert("questo alert permette di far funzionare la riga");  //se tolgo questo alert, non viene caricata la select della seconda riga		 		
    
    //**********TERZA RIGA		
    row = document.createElement("TR"); 		
    td1 = document.createElement("TH"); 
    td1.appendChild(document.createTextNode("Anno inizio collaborazione")); 
    row.appendChild(td1); 		 		
    td2 = document.createElement("TD"); 		
    cellText = document.createElement("div"); 		
    index++; 		
    id_indice = "dati"+index;        
    cellText.setAttribute("id", id_indice); 		
    td2.appendChild (cellText); 		
    row.appendChild(td2);  		
    mostraInfo(cod_gruppo, inizio, "fine"); 		
    tbody.appendChild(row); 		
    
    }  
    </script>
    One day even the war will bow to the sound of a guitar (Jimi Hendrix)

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ma le tre righe che generi sono fisse?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Originariamente inviato da cavicchiandrea
    Ma le tre righe che generi sono fisse?
    In pratica vengono aggiunte alla tabella tre righe ogni volta che si preme un bottone.
    One day even the war will bow to the sound of a guitar (Jimi Hendrix)

  4. #4
    se l'alert, interrompendo lo script, rende funzionante il tutto, potresti provare a fare richieste ajax sincrone.
    var_fine.open("GET",url,false);//il terzo parametro settato a false invece che a true.

    forse la nuova chiamata sovrascrive la precedente.

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da Voodoo Child
    In pratica vengono aggiunte alla tabella tre righe ogni volta che si preme un bottone.
    Non è quello che ho chiesto, se il layout e fisso potesti far generare tutto da php e inserirlo tramite innerHTML cosi non usi il dom, da una lettura veloce del dom gli id che assegni sembrano tutti uguali cioè con lo stesso id per tutte e tre le righe e questo crea sicuramente dei problemi.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Originariamente inviato da cavicchiandrea
    Non è quello che ho chiesto, se il layout e fisso potesti far generare tutto da php e inserirlo tramite innerHTML cosi non usi il dom, da una lettura veloce del dom gli id che assegni sembrano tutti uguali cioè con lo stesso id per tutte e tre le righe e questo crea sicuramente dei problemi.

    No purtroppo credo di non poterlo fare. Comunque gli id nei div sono differenti.. Infatti come id assegno la variabile id_indice, che è diverso per ogni riga, dato che faccio indice++ e id_indice = "dati"+index e quindi gli id saranno dati1, dati2, dati3 ecc.
    One day even the war will bow to the sound of a guitar (Jimi Hendrix)

  7. #7
    Originariamente inviato da lucavizzi
    se l'alert, interrompendo lo script, rende funzionante il tutto, potresti provare a fare richieste ajax sincrone.
    var_fine.open("GET",url,false);//il terzo parametro settato a false invece che a true.

    forse la nuova chiamata sovrascrive la precedente.
    Confesso subito che non sono molto pratico di ajax e quindi non so se per fare una richiesta sincrona basti mettere false al posto di true, ma se così fosse allora non va nemmeno l'ultima riga
    One day even the war will bow to the sound of a guitar (Jimi Hendrix)

  8. #8
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    C'è un link pubblico da visionare testare?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  9. #9
    Originariamente inviato da Voodoo Child
    No purtroppo credo di non poterlo fare. Comunque gli id nei div sono differenti.. Infatti come id assegno la variabile id_indice, che è diverso per ogni riga, dato che faccio indice++ e id_indice = "dati"+index e quindi gli id saranno dati1, dati2, dati3 ecc.
    Non è che il True sta lì per bellezza, per fare una richiesta sincrona basta mettere false al posto di true...

  10. #10
    Originariamente inviato da lucavizzi
    Non è che il True sta lì per bellezza, per fare una richiesta sincrona basta mettere false al posto di true...
    Come ho già detto ho provato a mettere false al posto di true, però non va lo stesso, anzi non funziona nemmeno l'ultima riga. Probabilmente devo cambiare qualcos'altro. Comunque cercando di isolare il problema quasi sicuramente il problema è dovuto a queste richieste asincrone.
    Ora vedo di farlo funzionare e poi porto notizie
    One day even the war will bow to the sound of a guitar (Jimi Hendrix)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.