コンテンツをアップロードするためのモジュールを作成しました。それは基本的にファイルAPIによって行われます。
htmlコードは
<input type="file" id="filepicker-input" multiple="true" style="display:none;"/>
<div class="addfile_btndiv" id="addfile_btndiv">
<span id="direct-upload-text"><input name="" class="add_filebtn" type="button" value="Add Files" /></span>
</div>
<div id="dropped-files">
</div>
<div class="clear"></div>
</div>
この操作は、ファイルの変更時に実行されます。jsコードは
var fileInput = document.getElementById("filepicker-input");
document.getElementById("direct-upload-text").onclick = function(e){
fileInput.click();
}
fileInput.onchange = function(e) {
//basically same as in ondrop
$("#dropped-files").html("");
var files = e.target.files;
var type = 'zip';
var location_block = 1;
var check = createPreviewElements(files, type, location_block);
if(check){
//add an onclick property to the upload button, this will trigger the main upload process
var uploadButton = document.getElementById('upload_button_zip_1');
uploadButton.onclick = function(e){
var block = document.getElementById("current_block");
block.value = location_block;
uploadButton.onclick = null; //disable the onclick event once it happened
document.getElementById('loading_wrapper').style.display = 'inline';
setTimeout(function(){$('#loading_wrapper').fadeOut()}, 6000); //fade out loader after 2 sec
startupload(files, type, location_block);
};
}
}
アップロードは完全に機能しています。私の問題は、このアップロードにキャンセル ボタンがあることです。私はこれをいくつかのJavaScriptコードで管理しましたが、ユーザーが同じファイルを再選択できるようになった後、「onchange」はトリガーされません。そのため、キャンセル ボタンに新しいロジックを追加して、現在の入力タイプを削除し、新しい入力タイプを配置します。コードは
$('#filepicker-input').attr("id", "newID");
var foo = document.getElementById("blk_switchbox1");
var olddiv = document.getElementById("newID");
foo.removeChild(olddiv);
var element = document.createElement("input");
element.setAttribute("type", "file");
element.setAttribute("id", "filepicker-input");
element.setAttribute("class", "nodisplay");
foo.appendChild(element);
これはmozillaでうまくいきます。クロムではありません。chrome では、dom 要素にキャッシングが存在します。私を助けてください