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

    Simulare "Allega un altro file" di GMail

    Ciao a tutti,
    vorrei uno script che mi riproponga le stesse funzioni di GMAIL per quanto riguarda l'aggiunta di un nuovo allegato.

    In pratica inizialmente ho un input di tipo FILE (solo uno), poi clicco su "Allega un altro file" e ne compare un altro... così all'infinito. Non sarà proprio all'infinito, ma è una funzione abbastanza dinamica.

    Ho provato con innerHTML, ma questo mi cancella il testo di tutti gli input.file precedenti.
    Ho provato con DOM, ma funziona a malapena su firefox e non sono sicuro che sia la soluzione migliore.

    Voi cosa mi consigliate? Vorrei una soluzione crossbrowser.
    Grazie amici.
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  2. #2
    Quando usi innerHTML, non devi usare l'operatore = bensi +=


    elemento.innerHTML+="il mio testo";

  3. #3
    si lo so... infatti uso quello,
    ma quello non lascia inalterato il contenuto del DIV contenitore.

    Equivale a dire
    elemento.innerHTML = elemento.innerHTML + "<input ....... />"

    Questo significa che se io ho riempito i precedenti input, li vedrò di nuovo... MA VUOTI!
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Si cancellano perché innerHTML += prevede la riscrittura dell'intero innerHTML e quindi per ragioni di sicurezza i file fields vengono svuotati.

    Prova questo
    codice:
    <html>
    <head>
    <script language="javascript">
    function addFileUpload(fld) {
      var new_row = document.getElementById(fld).insertRow();
      var new_td = new_row.insertCell();
      new_td.innerHTML = '<input type="file" name="uploads[]" />';
    }
    </script>
    </head>
    <body>
    <form name="mioform">
    <table id="fileupload">
    <tr>
      <td>
        <input type="file" name="uploads[]" />
      </td>
    </tr>
    </table>
    <input type="button" onclick="addFileUpload('fileupload');" value="more" />
    
    </form>
    </body>
    </html>
    Così, aggiungi righe ad una tabella via DOM e le righe precedenti non vengono assolutamente modificate.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    L'ho provato.... e funziona....

    peccato che utilizzi le tabelle e funzioni solo su Internet Explorer... però siamo sulla buona strada
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ah, è un problema di FF che non riconosce le funzioni senza argomenti. Ti basta aggiungere come argomento di insertRow e insertCell un bel -1 che viene invece assunto come valore di default in IE.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Ok, però lo lascio perdere perchè non voglio utilizzare le tabelle.

    Io mi sto scervellando in questo script DOM ma non riesco a capire perchè setAttributeNS non funziona!! Eppure dalle specifiche la sintassi è giusta!!
    Naturalmente ho commentato la parte di codice non funzionante
    Codice PHP:
    <style type="text/css">
    .
    i100x100 {
        
    width:100%;
        
    clear:both;
    }
    </
    style>
    <
    div>Carica immagini dal tuo PC<div id="imagesfileupload"><input type="file" name="images[]" size="50" class="i100x100" onchange="addNewElement();" /></div></div>
    <
    input type="button" value="nuovo" onclick="addNewElement();" />
    <
    script type="text/javascript">
    function 
    addNewElement() { 
        var 
    imfu document.getElementById("imagesfileupload"); 
        var 
    xhtml "http://www.w3.org/1999/xhtml";
        var 
    fu;
        if(
    document.createElementNS && (fu=document.createElementNS(xhtml,"input"))!=null
        
    && fu.setAttributeNS!==undefined){
            
    alert("metodo usato: createElementNS");

    /*
            fu.setAttributeNS(xhtml,"type","file");
            fu.setAttributeNS(xhtml,"name","images[]");
            fu.setAttributeNS(xhtml,"size","50");
            fu.setAttributeNS(xhtml,"class","i100x100");
            fu.setAttributeNS(xhtml,"onchange","addNewElement();");
    */
            
    fu.type "file";
            
    fu.name "images[]";
            
    fu.size "50";
            
    fu.className "i100x100";
            
    fu.onchange addNewElement;

            
    imfu.appendChild(fu);
        }
        else if(
    document.createElement && (fu=document.createElement("input"))!=null
        
    && fu.setAttribute!==undefined){
            
    alert("metodo usato: createElement");

            
    fu.setAttribute("type","file");
            
    fu.setAttribute("name","images[]");
            
    fu.setAttribute("size","50");
            
    fu.className "i100x100";
            
    fu.onchange addNewElement;

            
    imfu.appendChild(fu);
        }
        else {
            
    alert("nessuno");
        }

    }
    </script> 
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  8. #8
    Aiuto... su google e qui sul forum non si trova niente su setAttributeNS
    praticamente ci ho perso un giorno su questa cosa
    «Se leggi dimentichi, se vedi capisci, se fai impari» Piaget

  9. #9
    Volendo puoi fare una funzione che salva i value degli input.
    Dopo innerHTML fai in modo che i value vengano riassegnati agli input.


    Abbozzo qualcosa:
    codice:
    myValues=new Array();
    
    function prendiInput() {
    myInputs=new Array();
    myInputs=elemento.getElementsByTagName("input");
    for(i=0; i!=myInputs.lenght; i++)
       {
           salvaValue(myInputs[i], i);
       }
    }
    
    function salvaValue(elem, num) {
    myValues[num]=elem.getAttribute("value");
    }
    
    function reimpostaValue_innerHTML() {
    elemento.innerHTML+="quello che vuoi tu";
    myInputs=new Array();
    myInputs=elemento.getElementsByTagName("input");
    for(g=0; g!=myInputs.lenght-i; g++)
       {
           myInputs[g].setAttribute("value", myValues[g]);
       }
    }
    Dovrebbe funzionare. L'importante è che non usi altri contatori con nome di variabile i. Altrimneti vai nella funzione prendiInput e sostituisci i con un altro nome.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Servito.
    codice:
    <html>
    <head>
    <script language="javascript">
    
    function addFileUpload2(fld) {
      var nodeBr = document.createElement('br');
      document.getElementById(fld).appendChild(nodeBr);
      var nodeInput = document.createElement('input');
      nodeInput.type = "file";
      nodeInput.name = "uploads2[]";
      document.getElementById(fld).appendChild(nodeInput);
    }
    </script>
    </head>
    <body>
    <h1>Senza Tabelle</h1>
    <form name="altroform">
    <div id="fileupload_2">
      <input type="file" name="uploads2[]" />
    </div>
    <input type="button" value=" more " onclick="addFileUpload2('fileupload_2');" />
    </form>
    </body>
    </html>
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.