Search code examples
javascriptajax-upload

Multi file upload


<?php $uploadNeed=3 ; for($i=0;$i<$uploadNeed;$i++) { ?>
    <div class="smWidth">
        <input type="file" name="upload_file" value="" id=" " OnClick="alert("
        2 ");" />
        <br />
        <div class="clear">
        </div>
    </div>
    <?php } ?>

I am able to create three file upload fields, but i want to add a new input file filed only when i select a file.... it should keep on increasing.... something like Facebook style file upload where you select a file for the first field, then the next popup's...

I am actually checking for click event of browse, but it does not work...


Solution

  • Here is a very basic pure-JS implementation - hopefully it will give you a nudge in the right direction...

    <script type="text/javascript">
    
      // This keeps track of how many inputs there are, because each one MUST have a unique name!
      var inputCounter = 1;
    
      function inputChange() {
    
        // This function will add a new input element, in a div, as it is in your
        // original code, every time it is called. We attach it to the onchange
        // event of all the inputs
    
        // Declare local variables and increment input counter (for input names)
        var newContainerDiv, newClearDiv, newInput, newBr;
        inputCounter++;
    
        // Create the new elements and set their properties
        newContainerDiv = document.createElement('div');
        newContainerDiv.className = 'smWidth';
        newInput = document.createElement('input');
        newInput.type = 'file';
        newInput.name = 'upload_file_'+inputCounter;
        newInput.onchange = inputChange;
        newBr = document.createElement('br');
        newClearDiv = document.createElement('div');
        newClearDiv.className = 'clear';
    
        // Add the new elements to the DOM
        newContainerDiv.appendChild(newInput);
        newContainerDiv.appendChild(newBr);
        newContainerDiv.appendChild(newClearDiv);
        document.getElementById('uploads_container').appendChild(newContainerDiv);
    
      }
    
    </script>
    
    <!-- just create one input at first, so we don't need the PHP loop any more -->
    
    <div id="uploads_container">
      <!-- we wrap it all in an outer container div with an id, to ease the task of adding more elements -->
      <div class="smWidth">
        <input type="file" name="upload_file_1" onchange="inputChange();" />
        <br />
        <div class="clear">
        </div>
      </div>
    </div>