Clone a file input element in Javascript

后端 未结 4 1479
囚心锁ツ
囚心锁ツ 2020-11-28 11:55

I have a file input element that needs to be cloned after the user has browsed and selected a file to upload. I started by using obj.cloneNode() and everything worked fine,

相关标签:
4条回答
  • 2020-11-28 12:32

    You can apply other method. You have to send real element to an iframe and cloned elements insert to form. For example:

    $("INPUT[type='file']").each
    (
        function(index, element)
        {
        $(this).wrap("<div></div>");
        var Div = $(this).parent();
        $(this).appendTo("FORM[name='forIframe']"); // This form for iframe
        Div.append($(this).clone());
        }
    );
    

    If you use this method your form will send file to a server, but only one note, in Chrome an IE inputs with files is reseted.

    0 讨论(0)
  • 2020-11-28 12:33

    In jQuery fileupload widget there is a file input replace method to get around the change event listener only firing once.

    https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload.js#L769

    (_replaceFileInput method in jquery.fileupload.js)

    0 讨论(0)
  • 2020-11-28 12:36

    Editing the file form field is a security risk and thus is disabled on most browsers and should be disabled on firefox. It is not a good idea to rely on this feature. Imagine if somebody was able, using javascript, to change a hidden file upload field to, lets say,

    c:\Users\Person\Documents\Finances

    Or

    C:\Users\Person\AppData\Microsoft\Outlook.pst

    :)

    0 讨论(0)
  • 2020-11-28 12:43

    Guessing that you need this functionality so you can clone the input element and put it into a hidden form which then gets POSTed to a hidden iframe...

    IE's element.clone() implementation doesn't carry over the value for input type="file", so you have to go the other way around:

    // Clone the "real" input element
    var real = $("#categoryImageFileInput_" + id);
    var cloned = real.clone(true);
    
    // Put the cloned element directly after the real element
    // (the cloned element will take the real input element's place in your UI
    // after you move the real element in the next step)
    real.hide();
    cloned.insertAfter(real);   
    
    // Move the real element to the hidden form - you can then submit it
    real.appendTo("#some-hidden-form");
    
    0 讨论(0)
提交回复
热议问题