JS 中的进度条

Progressbar in JS

我有一个部门 html 作为

<div id="download-progress"></div>

我想用 js 函数 progress() 在其中显示我的文件上传进度,该函数在单击时运行。我使用以下表格上传文件。

<form id="myform" name="myform" enctype="multipart/form-data" target="hiddenFrame" method="post">

这些文件可能以 zip 格式提供,我将其解压缩,然后读取元数据,然后将它们附加到列表中。它通过标签名称获取节点以附加到数据。我只想要一个进度条,告诉我有多少文件已上传。如果您需要,我可以为您提供更多信息。目前我尝试使用以下代码进行相同的操作,但它没有提供我在 IE11 中上传文件的上传百分比。

function progress() {
  var elem = document.getElementById("myBar");   
  var width = 10;
  var id = setInterval(frame, 10);
  function frame() {
    if (width >= 100) {
      clearInterval(id);
    } else {
      width++; 
      elem.style.width = width + '%'; 
      elem.innerHTML = width * 1  + '%';
    }
  }

}

如何在所有现代浏览器中显示文件上传?

The innerHTML property has some problems in IE when trying to add or update form elements

Link

首先,我不知道你的代码应该做什么,但我猜你正在上传一些文件并想为它创建一个进度条。你这样做是错误的,只是用计时器更改值,因为文件可能仍在上传并且用户可能已经离开页面而没有让它完成。为避免这种情况,我们通常使用 AJAX 上传并监听进度事件:

xhr: function() {
   var xhr = new window.XMLHttpRequest();
   xhr.upload.addEventListener("progress", function(evt) {
      if (evt.lengthComputable) {
         var percentComplete = evt.loaded / evt.total;
         //Do something with upload progress here
      }
}, false);

为避免 IE11 出现问题,您需要解决 IE innerHTML source 的问题。

var container = document.getElementById("mainForm:table_1").parentNode;
var content = container.innerHTML
container.innerHTML= content;

对于您的示例,它应该是:

var elem = document.getElementById("myBar").parentNode;