Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Funzione molto complicata con javascript

    Innanzitutto volevo chiarire che questo è il mio primo post scritto in questo forum e volevo ringraziare chi con la sua esperienza, e pazienza soprattutto, mette a disposizione qui le sue conoscenze per aiutare neofiti come me.

    Venendo al dunque, io ho preso spunto da una funzione javascript scritta da Xinod in un post molto tempo fa che permetteva di aggiungere dinamicamente una riga di input con accanto il relativo bottone per rimuovere quella riga. Poiché a me non serviva aggiungere solo una riga alla volta ma proprio una parte di tabella più grande ho modificato quel codice giungendo a questo:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
    <title>aggiungi / rimuovi campi input</title>
    <script language="JavaScript" type="text/javascript">
    <!--
    var num=8;
    function accoda(){
    if(document.createElement && document.getElementById && document.getElementsByTagName) {
    // crea elementi
    var oTr=document.createElement("TR");
    var oTd1=document.createElement("TD");
    var oTd2=document.createElement("TD");
    var oTd3=document.createElement("TD");
    var oTd4=document.createElement("TD");
    var oField1=document.createElement("INPUT");
    var oField2=document.createElement("INPUT");
    var oField3=document.createElement("INPUT");
    var oButt=document.createElement("INPUT");

    // setta attributi
    oField1.setAttribute("type","text");
    oField1.setAttribute("name","testo"+num);
    oField2.setAttribute("type","text");
    oField2.setAttribute("name","testo"+num+1);
    oField3.setAttribute("type","text");
    oField3.setAttribute("name","testo"+num+2);
    oButt.setAttribute("type","button");
    oButt.setAttribute("value","rimuovi");

    // setta gestore evento
    if(oButt.attachEvent) oButt.attachEvent('onclick',function(e){rimuovi(e) ;})
    else if(oButt.addEventListener) oButt.addEventListener('click',function(e){rimuovi (e);},false)

    // appendi al relativo padre
    oTd1.appendChild(oField1);
    oTd2.appendChild(oField2);
    oTd3.appendChild(oField3);
    oTd4.appendChild(oButt);
    oTr.appendChild(oTd1);
    oTr.appendChild(oTd2);
    oTr.appendChild(oTd3);
    oTr.appendChild(oTd4);
    document.getElementById('tabella').getElementsByTa gName('TBODY')[0].appendChild(oTr);

    var oTr2=document.createElement("TR");
    var oTd5=document.createElement("TD");
    var oTd6=document.createElement("TD");
    var oTd7=document.createElement("TD");
    var oTd8=document.createElement("TD");
    var oTd9=document.createElement("TD");
    var oTd10=document.createElement("TD");
    var oField4=document.createElement("INPUT");
    var oField5=document.createElement("INPUT");
    var oField6=document.createElement("INPUT");
    var oField7=document.createElement("INPUT");
    var oField8=document.createElement("INPUT");
    var oButt2=document.createElement("INPUT");

    // setta attributi
    oField4.setAttribute("type","text");
    oField4.setAttribute("name","testo"+num+3);
    oField5.setAttribute("type","text");
    oField5.setAttribute("name","testo"+num+4);
    oField6.setAttribute("type","text");
    oField6.setAttribute("name","testo"+num+5);
    oField7.setAttribute("type","text");
    oField7.setAttribute("name","testo"+num+6);
    oField8.setAttribute("type","text");
    oField8.setAttribute("name","testo"+num+7);
    oButt2.setAttribute("type","button");
    oButt2.setAttribute("value","rimuovi");

    // setta gestore evento
    if(oButt2.attachEvent) oButt2.attachEvent('onclick',function(e){rimuovi(e );})
    else if(oButt2.addEventListener) oButt2.addEventListener('click',function(e){rimuov i(e);},false)

    // appendi al relativo padre
    oTd5.appendChild(oField4);
    oTd6.appendChild(oField5);
    oTd7.appendChild(oField6);
    oTd8.appendChild(oButt2);
    oTd9.appendChild(oField7);
    oTd10.appendChild(oField8);
    oTr2.appendChild(oTd5);
    oTr2.appendChild(oTd6);
    oTr2.appendChild(oTd7);
    oTr2.appendChild(oTd8);
    oTd6.appendChild(oTd9);
    oTd7.appendChild(oTd10);
    document.getElementById('tabella').getElementsByTa gName('TBODY')[0].appendChild(oTr2);

    // incrementa variabile globale
    num=num+8
    }
    }


    function rimuovi(e){
    if(document.removeChild && document.getElementById && document.getElementsByTagName) {
    if(!e) e=window.event;
    var srg=(e.target)?e.target:e.srcElement;

    // risali al tr del td che contiene l' elemento che ha scatenato l' evento
    while(srg.tagName!="TR"){srg=(srg.parentNode)?srg. parentNode:srg.parentElement}

    // riferimento al tbody
    var tb=document.getElementById('tabella').getElementsB yTagName('TBODY')[0];

    // rimuovi
    tb.removeChild(srg);
    }
    }
    //-->
    </script>
    </head>
    <body>
    <form name="modulo">
    <input type="button" value="accoda" onclick="accoda()" />
    <table border="1" id="tabella">
    <tbody>
    <tr>
    <td><input type="text" name="testo0" /></td>
    <td><input type="text" name="testo1" /></td>
    <td><input type="text" name="testo2" /></td>
    <td rowspan="3"><input type="button" disabled="disabled" value="rimuovi" /></td>
    </tr>
    <tr>
    <td rowspan="2"><input type="text" name="testo3" /></td>
    <td><input type="text" name="testo4" /></td>
    <td><input type="text" name="testo5" /></td>
    </tr>
    <tr>
    <td><input type="text" name="testo6" /></td>
    <td><input type="text" name="testo7" /></td>
    </tr>
    </tbody>
    </table>
    </form>
    </body>
    </html>

    Questo è un codice di prova decontestualizzato dalla pagina web che sto scrivendo. Ma adesso le mie domande in merito sono queste:

    1) Come faccio a ottenere un solo bottone rimuovi per tutta la porzione che aggiungo, al posto dei due che sono presenti (uno per ciascuna riga) in modo che esca come la prima parte impostata già nel body html?

    2) La prima cella della seconda riga (considerando sempre in riferimento alla porzione di tabella che aggiungo ogni volta) dovrà essere sede di un drop di un'immagine draggata da un altra parte della stessa pagina web e al momento del drop vorrei comparissero automaticamente delle informazioni correlate a quell'immagine nella prima, nella seconda e nella terza cella della prima riga della porzione di tabella che ho aggiunto...come si gestisce tutto ciò? si dovrebbe creare un evento al momento del drop nella cella aggiunta? e il codice jsp di ciò che voglio aggiungere lo devo scrivere comunque dentro il body html?

    Scusate se ho scritto qualcosa di insensato o ovvio ma sono alle prime armi...Grazie a chiunque si interessi a questo caso e mi possa fornire un aiuto..

  2. #2
    modifica il post e metti il codice tra i tags "php" cosi diventa più comprensibile

    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ciao e benvenuto, se non l'hai già fatto leggi la guida specifica sul DOM
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    grazie per le risposte..ho letto quella guida ma ai fini della pratica non mi funziona nulla e ho moltissimi interrogativi in merito...in ogni caso ho capito che per implementare la mia funzionalità è meglio prima sistemare altre cose che non mi funzionano per poi passare a quello di cui chiedevo qui...ad esempio non capisco perchè non mi funziona il drag&drop che ho impostato....adesso aprirò una discussione in merito a questo problema con il codice postato meglio

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.