20

ユーザーがアップロードするファイルを参照して選択した後、複製する必要があるファイル入力要素があります。私は obj.cloneNode() を使用することから始めましたが、IE で使用してみるまで、すべてが正常に機能していました。

それ以来、次のように jQuery の clone メソッドを使用してみました。

var tmp = jQuery('#categoryImageFileInput_'+id).clone();
var clone = tmp[0];

FireFox では期待どおりに動作しますが、IE では動作しません。

私は立ち往生しています。誰にもいくつか提案がありますか?

4

4 に答える 4

67

入力要素を複製して非表示のフォームに配置し、非表示の iframe に POST することができるように、この機能が必要であると推測しています...

IE の element.clone() 実装は、input type="file" の値を引き継がないため、逆の方法で行う必要があります。

// 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");
于 2009-02-09T17:03:32.390 に答える
9

ファイル フォーム フィールドの編集はセキュリティ上のリスクがあるため、ほとんどのブラウザでは無効になっており、Firefox でも無効にする必要があります。この機能に依存するのは得策ではありません。誰かが JavaScript を使用して隠しファイルのアップロード フィールドを次のように変更できたとしたら、

c:\Users\Person\Documents\Finances

または

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

:)

于 2009-01-06T04:44:14.360 に答える
2

jQuery fileupload ウィジェットには、一度だけ起動する変更イベント リスナーを回避するためのファイル入力置換メソッドがあります。

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

(jquery.fileupload.js の _replaceFileInput メソッド)

于 2012-12-24T00:50:32.230 に答える
0

他の方法を適用できます。実際の要素をiframeに送信し、複製された要素をフォームに挿入する必要があります。例えば:

$("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());
    }
);

この方法を使用すると、フォームはファイルをサーバーに送信しますが、1 つだけ注意してください。Chrome では、ファイルを含む IE 入力がリセットされます。

于 2015-06-23T10:56:11.220 に答える