Sunday, April 8, 2012

problem in file upload



I have the following markup:







<select multiple="multiple" id="targetFilesList" style="width:200px;height:110px;">

</select>

<input type="button" value="Get" id="btnGet" />







and following javascript:







$(function()

{

$('#btnGet').click(function()

{

var fileupload = $("<input type='file' name='filetoupload' style='visibility:hidden;'/>");

$('body').append(fileupload);



fileupload[0].onchange = function()

{

$('#targetFilesList').append('<option >' + fileupload.val() + '</option>');

return false;

}

fileupload.click();

});

});







Scenario is that i have to upload multiple files and once user has chosen the file to be uploaded i have to show the file name to user.Then,on submitting the form i will upload all the files.For this,on clicking the get button i am adding a fileupload control dynamically and initialise onchange event of the fileupload control just added. The problem in chrome 12 on clicking get button fileupload control does not get opened but in firefox4 and ie8 it is working. Any idea why?



Source: Tips4all

2 comments:

  1. To get it working on Chrome 12, you can just add it into a window timeout of 0, like this:

    window.setTimeout(function(){
    fileupload.click();
    },0);


    Why exactly it behaves like this, I am not sure. The first time I encountered the problem I tried it with a longer interval, reducing it all the time to see how low you could get it, until I noticed it doesn't even need a delay. The obvious answer would be that it isn't actually ready in DOM by the time you trigger the click (element is there, but is the appropriate events for it?).

    example: http://jsfiddle.net/HgEga/

    ReplyDelete
  2. Doing this kind of code yourself can be a pain. Maybe taking a look to an existing multiple file upload jQuery plugin will help.

    ReplyDelete