2012-01-11 17 views
6

javascriptでアップロードコントロールを作成し、element.click()を使用してファイルブラウザダイアログを表示しています。意図したとおりにclick()でJavaScriptとファイルのアップロードが正常に動作しない

function add(type) {    
     var element = document.createElement("input"); 
     element.setAttribute("type", type); 
     element.setAttribute("value", type); 
     element.setAttribute("name", type);    
     element.setAttribute("id", "element-" + i); 
     var removebutton = document.createElement('a'); 
     var removeimage = document.createElement('img'); 
     removeimage.setAttribute("width", 15); 
     removeimage.setAttribute("height", 15); 
     removeimage.setAttribute("class", "removebutton");             
     removeimage.src = "/Content/Images/redx.png";    
     removebutton.appendChild(removeimage); 
     removebutton.setAttribute("id", "remove-" + i); 
     removebutton.setAttribute("onclick", "remove(" + i + "); return 0;"); 
     var newfile = document.getElementById("uploadhere"); 
     //newfile.appendChild(removebutton); 
     newfile.appendChild(element); 
     newfile.appendChild(removebutton); 
     element.click(); 
     i++;      
    } 

ファイルbroswerダイアログが起動しますが、私は自分のフォームに提出する]を選択した後、すべてのファイルは、制御消える締結しました。

「ブラウズ」をクリックすると、ファイルbroswerダイアログが表示されますが、ファイルは正しくアップロードされます。

フォームにファイルアップロードコントロールを追加し、ファイルbroswerダイアログを表示して、意図したとおりに動作させる方法を教えてください。

enctype="multipart/form-data" 

POSTメソッドが指定されている:

+0

どこに「i」は、あなたの変数定義されている?http://jsfiddle.net – MCSI

+0

に例を追加してくださいを参照してくださいここには「i」が定義された、粗い[jsFiddle](http://jsfiddle.net/u8dcV/)があります。私が見るもう1つの問題は、あなたが私たちにremove()関数を表示していないことです。 – j08691

+3

は、私はいつもあなたは、あなたが潜在的にプライバシー侵害のトリックの多くを行うことができます行うことができれば理由は、スクリプトのアップロード要素をできなかったことを理解しました。しかし、おそらく私はそれを見てから何年も変わっていますか? –

答えて

1

Firefoxはこれを可能にする唯一のブラウザです。クロム、サファリ、オペラは、最初の場所では許可しませんが、IEはあなたをだましてしまいますが、この方法で選択したファイルを実際に提出することはできません。

.click()を完全に削除し、以前の入力のchangeイベントに新しいファイル入力を追加することで回避できます。この方法では、新しいファイルごとに2回のクリックを必要としません(入力+ )。例http://jsfiddle.net/APstw/1/

またjQuery : simulating a click on a <input type="file" /> doesn't work in Firefox?

4

"ファイル" 入力タイプには属性を含める必要があります。これを参照してください:http://www.w3.org/TR/html4/interact/forms.html#edef-FORM

このシナリオでも、AJAX呼び出しでアップロードを実行しようとしているように聞こえる質問に基づいて、他の制限があります。 https://stackoverflow.com/questions/3686917/post-to-php-with-enctype-multipart-form-data

jQueryを使用しているかどうかわからないが、入力フォームを非表示にして、必要に応じてclone()を使用しようとしている場合はどうすればよいでしょうか?

+0

これは私の書式で特定されています – samack

+0

私はすべてのコードを投稿しませんでした...これは解決策ではないことをチェックする何かであるので、このコメントをupvotingする人に感謝します。 – samack

0

Ann.Lによって指摘されているように、ページにアップロードコントロールを動的に追加しようとすると、奇妙な動作が予想されます。

私はIEには、特に静かに失敗し、(あなたがリクエストに掲載のファイル名が、それに対応していない実際の「バイト配列」を参照されます)、あなたのデータを投稿しないことを覚えておいてください。

アップロードフィールドを最初から作成するのではなく、表示を切り替えないのはなぜですか。このようにして、ページはコントロールを所有し、チャンスはあなたの関数が機能することです。残った唯一のことは、新しくアップロードされたファイルでコンテナを更新することです。

+0

私は誰でもフォームを使用して、必要に応じて別のファイルをアップロードできるようにしているからです。私は理論的にはアップロードオプションをたくさん作成してそれらを隠すことができますが、それは非常に悪い計画のようです。 – samack

関連する問題