Web development blog

Clear upload file input field

Apr.23, 2009

Many web developers came to the problem that they are not able to change value of file input field from Java Script in the web application. There is no access to value field of file input tag because of security restriction. However there is a trick how to erase this field if you need it in your application.

You can simply redraw the html block where your input tag is located. In this case all data will remain the same except the selected file value.

<div id="uploadFile_div">
<input type="file" class="fieldMoz" id="uploadFile" 
            onkeydown="return false;" size="40" name="uploadFile"/>
</div>
<a onclick="clearFileInputField('uploadFile_div')" 
                         href="javascript:noAction();">Clear</a>

Java Script function below looks strange but acts exactly in the way we want:
 
<script>
function clearFileInputField(tagId) {
    document.getElementById(tagId).innerHTML = 
                    document.getElementById(tagId).innerHTML;
}
</script>
            

:, , , ,

Web Developer Howto


41 comments to “Clear upload file input field”

  1. vic

    its. work!! thx very much
  2. v

    thank you veryyyy much! ;-)
  3. Newbie

    Excellent hack.. love it.. :)
  4. Scott

    That is the sweetest bit of code I have seen in a while, brilliant in it’s simplicity and worked in the big 3 !
  5. Dave

    Awesome! I have been looking for something like this for days. Wish I found your code sooner. THANKS!!!
  6. Bogdan

    Thanks, Dave.
    Just put the link to this site and it will help me to rise up in Search result list.
  7. Claybo

    Absolutely brilliant!
    Thanks Dave
  8. diamonddon

    great! saved me hours of hacking
  9. joy

    ขอบคุณมากค่ะ it works! thanks a lot !!
  10. Angel

    Great script! Works fine for my needs. Thanks!
    2 comments: 1. there is a caveat about this, related to compatibility with the use of the form.elements.field_name syntax, explained at
    http://www.webdeveloper.com/forum/showthread.php?t=178461 2. this change makes it more general and intuitive, as you can use the input-file’s own id instead of that of its container: function clearFileInputField(tagId) {
    var parent = document.getElementById(tagId).parentNode
    parent.innerHTML = parent.innerHTML;
    } Then you call it like: clearFileInputField(’uploadFile’) The container div (or span) still must exist, but does not even need an id.
  11. Sielnmen

    excellent, i really appreciate your help… :)
  12. Gaurav Jain

    Wow!! It realy works.. Thanks..
  13. mnsharif

    You rock!
    Thanks.
  14. Shalini

    Hi,
    Is it working in case of IE6? I thnk its not..
    Please check and if not working can u give me any solution ASAP? Thanks.
  15. Praveen

    Wow! this works. any idea why it does ?
  16. Albert Chesaro

    This is really nice, I gave been using full page reload to clear the fields on http://www.kori.co.ke, this will definitely work for me! Thanks for sharing!!
  17. Henrique

    Excellent!!!
    Works!
    saved a lot of time!
  18. ah72

    Thanks a lot !!! Quote: “Java Script function below looks strange but acts exactly in the way we want…” This is because using innerHTML will delete the upload box and recreate it while browsers (firefox) don’t allow pre-setting the value of inputs with type ‘file’ when creating them, thus the value will be reset. Be minded though that you’ll recreate only the html of the upload box and lose all its methods (like event functions) previously defined, to work around this, you can wrap the upload box element inside a span and when you assign events or functions, assign them to the span not to the upload box element itself, this way you won’t lose them. Here’s an example using jQuery: $(’#uploadBox’).wrap(”") /* result -> */ /* binding “change” and “mouseover” event functions to the not to */
    $(’#uploadBox’).parent().bind(”change mouseover” , function(){ myValidator.element($(’#uploadBox’)); });
    /* myValidator refers to an object created by “jQuery Validate plugin” used for form validation in this example */ /* creating an img element, when clicked on clears the upload box */
    $(’#uploadBox’).parent().after(”");
    $(’#clearUploadBox’).click(function(){
    /* using jQuery html() method equivalent to innerHTML */
    $(’#uploadBox’).parent().html( $(’#uploadBox’).parent().html() );
    myValidator.element($(’#uploadBox’));
    }); Regards
  19. ah72

    Thanks a lot !!! Quote: “Java Script function below looks strange but acts exactly in the way we want…” This is because using innerHTML will delete the upload box and recreate it while browsers (firefox) don’t allow pre-setting the value of inputs with type ‘file’ when creating them, thus the value will be reset. Be minded though that you’ll recreate only the html of the upload box and lose all its methods (like event functions) previously defined, to work around this, you can wrap the upload box element inside a span and when you assign events or functions, assign them to the span not to the upload box element itself, this way you won’t lose them. Here’s an example using jQuery: [code]
    $(’#uploadBox’).wrap(”") /* result -> */ /* binding “change” and “mouseover” event functions to the not to */
    $(’#uploadBox’).parent().bind(”change mouseover” , function(){ myValidator.element($(’#uploadBox’)); });
    /* myValidator refers to an object created by “jQuery Validate plugin” used for form validation in this example */ /* creating an img element, when clicked on clears the upload box */
    $(’#uploadBox’).parent().after(”");
    $(’#clearUploadBox’).click(function(){
    /* using jQuery html() method equivalent to innerHTML */
    $(’#uploadBox’).parent().html( $(’#uploadBox’).parent().html() );
    myValidator.element($(’#uploadBox’));
    });
    [/code] Regards
  20. dirq

    Weird. But it works.
  21. Ed

    Absolutely brilliant! It is exactly what I was looking for. Thank you very much!
  22. Arivanand

    Thanks. Thanks a lot… :)
  23. gunasekaran

    Dear sir
    how can assign the value in file tag.If I have a file name in Query string then how can assign the value to file tag I have tried the below said code but its not worked
    Server side
    ~~~~~~~~~~~~
    <%
    Respose.write “” %>
    Client side using dom document.getElementById(”Upload).value = “filename”;
  24. Bogdan

    Hi gunasekaran, You can not do that at all. This restriction is made to prevent file stealing from client machine.
  25. paperke67

    Nice, very nice.
  26. Vaman

    Thanks A lot for the Wonderful piece of code :)
    U Rock!
  27. alejo

    Thank you Bogdan for starting the post!
    Angel your solution was what I expected.
  28. Nicolas Grilly

    Very clever! Thank you!
  29. Bijesh

    Hi I am using a structure like following
    ————————————————— Attachment1
    //the script to clear the input is like
    hereupload.id will be the upload objects id ie,upload1 in this case
    function clearUploadInput(upload)
    {
    upload.ownerDocument.getElementById(upload.id + “_Form”).innerHTML = upload.ownerDocument.getElementById(upload.id + “_Form”).innerHTML;
    }
    —————————————————–
    redrawing the inner HTML is a good hack,it will work fine in IE,but in non-ie browserslike firefox and chrome , it is causing the entire form to redraw(if we redraw the entire object(upload)),and It is not working for the second time with the mentioned code
  30. Jim Wiggins

    Great idea! Works in IE 6, 7, 8 and in FF 3.
  31. helie

    great piece of cod…thanks o alot…..
  32. Daniel Estévez

    Seems as weird as simple… and it works! Perfect! Thanks a lot!
  33. Diego

    Doesn’t work with ASP.NET AJAX.
  34. delijah

    Another solution (will keep events): function clearFileInputField(elem) {
    $elem = $(elem);
    $elem.replaceWith($elem.clone(true));
    }
  35. iulian

    delijah’s improvement It’s perfect
  36. kalyan

    Dude,
    You are awesome. You made my Day. Thanks a ton.
  37. Arvy

    Thank you very much for the tip, really useful for Ajax.
  38. premboyapati

    Hi guys!!! The following one only worked for me… function ClearFileUpload() {
    var fu = document.getElementById(”);
    if (fu != null) {
    document.getElementById(”).outerHTML = fu.outerHTML;
    }

Leave a Reply

The Content of this blog can be published anywhere with the link to original source.