Simple widget for multiple file uploads across browsers
Problem
I needed a basic way to present multiple file uploads to the user.
It needed to:
- Easily add a new file.
- Easily remove a file.
- Have no image dependencies.
- In Internet Explorer only show the filename being uploaded, not the full path.
- The widget would need to be extensible, like associating a select field with the input[file] (see below).
- Numbering of the input[file] would need to support array naming (userfile[]) as well as numeric naming (userfile1,userfile2,etc).
Screenshots
Usage
Setup: Javascript and CSS dependencies.
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/ui-lightness/jquery-ui.css" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script> <script type="text/javascript" src="../src/jquery.filecabinet.js"></script> <style> #add-attachment { text-decoration:underline;cursor:pointer; } .filecabinet-container .row { margin:5px 0px; } /* width of 75px keeps the input:file as small as possible */ .filecabinet-container .upload-field { position:relative;width:75px;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0); } .filecabinet-container table { width:70%; } .filecabinet-container table .file-row { text-align:left;width:20%; } .filecabinet-container table .file-display { text-align:left;width:55%; } .filecabinet-container table .file-type { text-align:left;width:20%; } .filecabinet-container table .file-remove { text-align:center;width:5%; } button[type=submit] { margin-top:25px; } </style>
Setup: HTML
<body> <h2>File input</h2> <div id="parent-container"> <form action="/upload-test" method="post"> <span id="add-attachment"></span> <button type="submit">Upload</button> </form> </div> <script> $(document).ready(function(){ $('#add-attachment').filecabinet(); $('button[type=submit]').button(); }); </script> </body>
Extending
Example of injecting a select box into the row after an upload row has been added.
$('#add-attachment').bind('filecabinetadded',function(event,obj){ var select = [''); var selectfield = $(select.join("\n")); obj.addRow.find('.file-display').after(selectfield); });
Demo & Code
Check out the Demo and source.
- Pushed on 03/24/2012 by Christian