Clear upload file input field

ADSENSE HERE!
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>


ADSENSE HERE!

65 comments:

  1. its. work!! thx very much

    ReplyDelete
  2. thank you veryyyy much! ;-)

    ReplyDelete
  3. Excellent hack.. love it.. :)

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

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

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

    ReplyDelete
  7. Absolutely brilliant!
    Thanks Dave

    ReplyDelete
  8. great! saved me hours of hacking

    ReplyDelete
  9. ขอบคุณมากค่ะ

    it works! thanks a lot !!

    ReplyDelete
  10. 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.

    ReplyDelete
  11. excellent, i really appreciate your help... :)

    ReplyDelete
  12. Wow!! It realy works.. Thanks..

    ReplyDelete
  13. 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.

    ReplyDelete
  14. Wow! this works. any idea why it does ?

    ReplyDelete
  15. 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!!

    ReplyDelete
  16. Excellent!!!
    Works!
    saved a lot of time!

    ReplyDelete
  17. 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

    ReplyDelete
  18. 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

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

    ReplyDelete
  20. Thanks. Thanks a lot... :)

    ReplyDelete
  21. 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";

    ReplyDelete
  22. Hi gunasekaran,

    You can not do that at all. This restriction is made to prevent file stealing from client machine.

    ReplyDelete
  23. Thanks A lot for the Wonderful piece of code :)
    U Rock!

    ReplyDelete
  24. Thank you Bogdan for starting the post!
    Angel your solution was what I expected.

    ReplyDelete
  25. Very clever! Thank you!

    ReplyDelete
  26. 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

    ReplyDelete
  27. Great idea! Works in IE 6, 7, 8 and in FF 3.

    ReplyDelete
  28. great piece of cod...thanks o alot.....

    ReplyDelete
  29. Seems as weird as simple... and it works!

    Perfect! Thanks a lot!

    ReplyDelete
  30. Doesn't work with ASP.NET AJAX.

    ReplyDelete
  31. Another solution (will keep events):

    function clearFileInputField(elem) {
    $elem = $(elem);
    $elem.replaceWith($elem.clone(true));
    }

    ReplyDelete
  32. delijah's improvement It's perfect

    ReplyDelete
  33. Dude,
    You are awesome. You made my Day. Thanks a ton.

    ReplyDelete
  34. Thank you very much for the tip, really useful for Ajax.

    ReplyDelete
  35. Hi guys!!!

    The following one only worked for me...

    function ClearFileUpload() {
    var fu = document.getElementById('');
    if (fu != null) {
    document.getElementById('').outerHTML = fu.outerHTML;
    }

    ReplyDelete
  36. Hello, thank you for the hint: starting from it I implemented a jQuery solution that can be seen here:

    http://github.com/Panmind/jquery-ajax-nav/commit/a23cb058901e61c756eaccecbbe59387048b12ab

    :-)

    ReplyDelete
  37. hi,

    i want NOT to clear the input file field when i press "submit". how can i do this?

    ReplyDelete
  38. i want to keep the file field populated after a failed validation.

    ReplyDelete
  39. I wonder how you came to this...
    But its brilliant really! :)

    ReplyDelete
  40. Nice Code. It worked even on asp.Net application.

    Thanx

    ReplyDelete
  41. brilliant trick, I have been looking for something like this before. thanks

    ReplyDelete
  42. Thanks you so much.... Helped me in IE browsers.

    ReplyDelete
  43. Nice Trick in a shorten way.
    XOXO

    ReplyDelete
  44. Thanks a lot.
    ขอบคุณครับ

    ReplyDelete
  45. This comment has been removed by a blog administrator.

    ReplyDelete
  46. When I was writing this pos - I didn't know any js libraries and didn't know javascript well at all.

    ReplyDelete
  47. Excellent...Done a great job. Its working fine for me.

    ReplyDelete
  48. Really nice.

    Thanks a lot. It work for me.

    ReplyDelete
  49. document.myForm.reset();

    ReplyDelete
  50. GREAT MAN! Thanks!!!!

    ReplyDelete
  51. Perfect solution for my issue! Thanks!!!

    ReplyDelete

Komen dong, tapi yang sopan dan tidak spam ya

Arsip Blog

Copyright © Spesial Unik. All rights reserved. Template by CB. Theme Framework: Responsive Design