- Home
- Categorie
- Coding e Sistemistica
- Javascript & Framework
- Aggiungere gruppo righe a tabella
-
Aggiungere gruppo righe a tabella
Salve a Tutti,
ho una tabella che riempio tramite php leggendo i dati da un db mysql.
in diversi punti della tabella inserisco dei pulsanti che mi dovrebbero permettere di aggiungere delle ulteriori righe di dettaglio prese sempre dal db.Con FF ho risolto utilizzando innerHTML sull'oggetto tbody ma questo metodo non funziona con IE7 perche' tbody e' read only.
Esiste un metodo alternativo per farlo funzionare anche su IE7?
Grazie in anticipo
Saluti
nic96
-
Ciao vnic96 e Benvenuto nel Forum GT.
Non sono riuscito a capire nel dettaglio il problema però posso segnalarti questo link in cui viene illustrata l'alternativa a innerHTML ossia il metodo DOM-based: innerHTML alternatives
-
Grazie per il benvenuto e per la risposta.
Scusa se sono stato poco chiaro, provo a spiegarmi.
Ho una tabella (DB mysql) in cui memorizzo i seguenti dati:
"prodotto", "macroprodotto", "magazzino", "quantità".
Tramite PHP creo una pagina html che visualizza questi dati in forma tabellare.
I dati visualizzati sono raggruppati per "macroprodotto", quindi il risultato sarà il seguente:_______________magazzino1 magazzino2 magazzino3
macroprodotto A___quantità1__quantità2___quantità3
+
macroprodotto B___quantità1__quantità2___quantità3
+Tra un macroprodotto e l'altro inserisco un pulsante (+) che dovrebbe attivare il dettaglio per prodotto del macroprodotto stesso come segue:
_________________"magazzino1""magazzino2""magazzino3"
"macroprodotto A"___quantità1____quantità2____quantità3__"prodotto1"_______quantità_____quantità_____quantità
__"prodotto2"_______quantità_____quantità_____quantità
__"prodotto3"_______quantità_____quantità_____quantità"macroprodotto B"___quantità_____quantità_____quantità
+I records della tabella sono veramente tanti quindi non posso creare la pagina staticamente e nascondere o visualizzare parti della stessa perciò devo gestire il tutto dinamicamente.
Con il il metodo DOM-based, per quel che ho potuto capire, posso creare le nuove righe della tabella ma non ho capito come leggere i dati dal DB e visualizzarli nelle strutture create.
Con innerHtml riesco a farlo ma funziona solo su firefox mentre a me serve che funzioni su IE6 e IE7.
Ho cercato qualche esempio a riguardo ma non ho ancora trovato nulla.
Grazie in anticipo
Saluti
vnic96
-
Non riesco a capire come riescie a funzionare con innerHTML.
InnerHTML serve per inserire del codice HTML in un nodo.
Per esempio:document.getElementById("miodiv").innerHTML = '<strong>Esempio</strong>'
Questo metodo non legge comunque i dati dal database.
Per leggere i dati dal database devi effettuare una chiamata asincrona ad un'altra pagina. Questa richiesta va fatta tramite l'oggetto XMLHttpRequest.P.S.: Perchè non utilizzi un framework javascript, per esempio jQuery? Con poche righe faresti ciò che hai descritto.
-
Si, l'ho fatto proprio così ma non ho utilizzato div ma tbody.
è possibile utilizzare un div all'interno di una tabella al posto del tbody in modo da poter appendere un gruppo di righe?
-
@vnic96 said:
è possibile utilizzare un div all'interno di una tabella al posto del tbody in modo da poter appendere un gruppo di righe?
No, non puoi.
Però potresti appendere n righe, oppure una sola riga con una cella in cui è contenuto il div.
-
si ma così perdo l'allineamento con il resto della tabella.
attualmente funziona così come dici tu (se ho ben capito il tuo msg) ma mi richiedono l'allineamento tra le righe del dettaglio e quelle che lo precedono
-
Potrei ovviare con xml.
Potrei farmi un file xml per ogni macroprodotto e leggerlo con una funzione javascript e con il metodo dom potrei aggiungere e popolare le nuove righe.
Non ho mai utilizzato xml, pensi possa essere troppo lento leggere un xml?
-
@vnic96 said:
potrei ovviare con xml
potrei farmi un file xml per ogni macroprodotto e leggerlo con una funzione javascript e con il metodo dom potrei aggiungere e popolare le nuove righe.
Con il javascript non devi leggere obbligatoriamente un file xml, ma anche un file di testo o html.
@vnic96 said:non ho mai utilizzato xml, pensi possa essere troppo lento leggere un xml?
No, non è lento, anzi nelle web application più professionali viene usato xml o json.
-
grazie pe la pazienza
appena possibile proverò a seguire questa strada
Saluti
vnic96
-
@vnic96 said:
grazie pe la pazienza
appena possibile proverò a seguire questa stradaFigurati.
Tieni in considerazione il suggerimento di utilizzare un framework come jQuery o altro equipollente. Ti semplifica di parecchio la vita.
-
rieccomi
con javascript e xml funziona ma su IE7 è di una lentezza spaventosa!!
IExplorer.exe occupa la cpu al 100% fino a quando non ha finito.
Hai qualche suggerimento?
Domani farò altre prove per capire se il problema è nella lettura del file xml o nella generazione della struttura tr/td che vado ad appendere al tbody
-
il problema sta nella costruzione della struttura. funziona perfettamente con FF ma con IE7 e' lentissima.
ecco il codice
var tbody = document.getElementById("details_"+tester); var prodotti = xml.getElementsByTagName("prodotto"); for (var i = 0; i < prodotti.length; i++) { var e = prodotti*;//leggo i nodi var d1 = e.getElementsByTagName("D1")[0].firstChild.data; . . var dn = e.getElementsByTagName("Dn")[0].firstChild.data; row = tbody.insertRow(i + 1); row.insertCell(0).appendChild(document.createTextNode("")); row.insertCell(1).appendChild(document.createTextNode("")); row.insertCell(2).appendChild(document.createTextNode(D1)); row.insertCell(3).appendChild(document.createTextNode("")); row.insertCell(4).appendChild(document.createTextNode(D2)); row.insertCell(5).appendChild(document.createTextNode("")); row.insertCell(6).appendChild(document.createTextNode(D3)); row.insertCell(7).appendChild(document.createTextNode("")); row.insertCell(8).appendChild(document.createTextNode(D4)); row.insertCell(9).appendChild(document.createTextNode("")); row.insertCell(10).appendChild(document.createTextNode(D5)); row.insertCell(11).appendChild(document.createTextNode("")); row.insertCell(12).appendChild(document.createTextNode(D6)); row.insertCell(13).appendChild(document.createTextNode("")); row.insertCell(14).appendChild(document.createTextNode(D7)); row.insertCell(15).appendChild(document.createTextNode("")); row.insertCell(16).appendChild(document.createTextNode("D8")) row.insertCell(17).appendChild(document.createTextNode("")); row.insertCell(18).appendChild(document.createTextNode(D9)); row.insertCell(19).appendChild(document.createTextNode("")); row.insertCell(20).appendChild(document.createTextNode(D10)); row.insertCell(21).appendChild(document.createTextNode("")); row.insertCell(22).appendChild(document.createTextNode("D11")) } document.getElementById('img1_'+prod).style.display="none"; document.getElementById('img2_'+prod).style.display=""; document.getElementById('details_'+prod).style.display=""; ```il bello e' che dovrei ancora aggiungere altre 26 colonne!! esiste un altro modo per creare le righe da aggiungere al tbody? grazie in anticipo Saluti vnic96
-
ho sostituito row.insertcell con createelement per tr e td
cosi' sembra andare decisamente meglio.