2011-07-26 11 views
0

javascriptで複数のファイルのアップロードに関する問題が発生しました。私は動的に入力を追加して、自分の複数のファイルアップロードを作成しようとしています。これはすべて簡単ですが、問題は、新しいものを追加するたびに、以前の "file"タイプの入力フィールドがリセットされるということです。Javascript .innerHTML my <input type = "file">

親divのinnerHTMLを変更するコードの最後の行を削除した場合、myの値はリセットされません。誰もがこの問題を解決する方法を知っていますか? javascriptコードは以下にあります。前もって感謝します。

if(document.getElementById("upload_queue").innerHTML.indexOf(_item) == -1) 
{ 
    var _row = "<tr id='queue_row_" + items_in_queue + "'>"; 
    _row += "<td>"; 
    _row += "<div class='remove_uploaded_image' onclick='remove_from_queue(" + items_in_queue + ")'></div>"; 
    _row += "</td>"; 
    _row += "<td>"; 
    _row += _item; 
    _row += "</td>"; 
    _row += "</tr>"; 

    document.getElementById("upload_queue").innerHTML += _row; 
    document.getElementById("upload_image_" + items_in_queue).style.display = "none"; 

    items_in_queue++; 

    document.getElementById("uploader_holder").innerHTML += 
     '<input id="upload_image_' + items_in_queue + 
     '" name="upload_image_' + items_in_queue + '" accept="image/jpeg" type="file"' + 
     'onchange="add_to_upload_queue()" style="display: inline;" />'; 
} 
+0

親からすべての要素を効果的に削除して新しい要素を作成しているため、リセットされます。 –

+0

私は+ =オペランドが新しい要素を追加する前にすべてを削除していることを知らなかった。私はjavascriptがdivの後ろにあるコード行を追加したと思っていました。+ = –

+2

を使ったときに期待していたように、 'innerHTML'は単にHTMLを文字列として追加するだけではありません。それは新しい値をとり、それをDOM要素として解析し、それらを親に追加(設定)します。 '+ ='は基本的に 'foo.innerHTML = foo.innerHTML + '....''と同じです。私。 'foo'の内容は「シリアライズ」され、新しい内容が追加され、すべてが' innerHTML'に割り当てられます(すでに述べたように、すべての子を取り除き、渡された値を解析します)。 –

答えて

3

うん...あなたの代わりにインナーHTML修正するのは、appendChildを使用したいとしている:

var myInput = document.createElement("INPUT"); 
// do stuff to my input 

var myContainer = document.getElementById("uploader_holder"); 
myContainer.appendChild(myInput); 

あなたは何をすべきかの一般的な要点です - あなたなら、私に知らせてもっと具体的なものが必要ですが、すでにJSをよく把握しているようです...内部HTMLを設定するのではなく、ほぼすべてのケースでそうしたいと思っています。 ... TDをTRに追加する必要があります。入力したTDを追加する必要があります。ターゲットテーブルをTRなどに追加する必要があります。

関連する問題