javascript - 为什么没有生成 <li>?我的脚本没有错误

标签 javascript html

我想自动添加一个 <li>当我使用 <input type="file"> 上传图像时添加到我的媒体列表中和一个脚本。我写了函数,一切看起来都很好,因为它没有显示错误;但是,我的图像没有显示在我的列表中。有人可以帮忙找出原因吗?

<div class="explorerContainer">
<!--This is the form to upload an image-->
<form method="post" enctype="multipart/form-data">
<div>
  <label for="image_uploads">Try your own image</label>
  <input type="file" id="image_uploads" name="image_uploads">
</div>
<!--Container for images list-->
<div class="medialistContainer">
  <ul class="mediaList">
    <li class="mediaItem" style="background-image: url('./src/images/testImage.jpg')"></li>
    <li class="mediaItem" style="background-image: url('./src/images/testImage2.jpg')"></li>
    <li class="mediaItem" style="background-image: url('./src/images/testImage3.jpg')"></li>
    <li class="mediaItem" style="background-image: url('./src/images/testImage4.jpg')"></li>
    <li class="mediaItem" style="background-image: url('./src/images/testImage5.jpg')"></li>
  </ul>
</div>
<!--This script is for uploading an image-->
<script>
  var input = document.querySelector('input');
  var preview = document.querySelector('.mediaList');

  input.style.visibility = 'hidden';
  input.addEventListener('change', updateImageDisplay);

  function updateImageDisplay() {
    while(preview.firstChild) {
     preview.removeChild(preview.firstChild);
    }
    var curFiles = input.files;
    if(curFiles.length === 0) {
      var para = document.createElement('p');
      para.textContent = 'No files currently selected for upload';
      preview.appendChild(para);
    } else {
        var list = document.createElement('ol');
        preview.appendChild(list);
        for(var i = 0; i < curFiles.length; i++) {
          var listItem = document.createElement('li');
          var para = document.createElement('p');
          if(validFileType(curFiles[i])) {
            para.textContent = 'File name ' + curFiles[i].name + ', file size ' + returnFileSize(curFiles[i].size) + '.';
            var image = document.createElement('img');
            image.src = window.URL.createObjectURL(curFiles[i]);
            listItem.appendChild(image);
            listItem.appendChild(para);
          } else {
            para.textContent = 'File name ' + curFiles[i].name + ': Not a valid file type. Update your selection.';
            listItem.appendChild(para);
            }
            list.appendChild(listItem);
          }
        }
  }

var fileTypes = ['image/jpeg', 'image/pjpeg', 'image/png']

function validFileType(file) {
  for(var i = 0; i < fileTypes.length; i++) {
    if(file.type === fileTypes[i]) {
      return true;
      }
    }
  return false;
}

function returnFileSize(number) {
  if(number < 1024) {
    return number + 'bytes';
  } else if(number > 1024 && number < 1048576) {
      return (number/1024).toFixed(1) + 'KB';
    } else if(number > 1048576) {
       return (number/1048576).toFixed(1) + 'MB';
      }
}
</script>

因此,最重要的是用户上传图像,该图像将显示在预览容器中,然后发布到我的媒体列表容器中。这是一个例子: enter image description here

最佳答案

基本上您的方法是有效的(至少对于第一个文件),但请记住,每次您选择文件时,输入的 files 属性都会被重置。 创建另一个文件数组,将输入中的文件复制到其中,并在循环中使用这个新数组。

http://jsfiddle.net/syvpqgn7/

关于javascript - 为什么没有生成 <li>?我的脚本没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51957813/

相关文章:

java - 如何使用 JSTL 交替表格行背景颜色?

javascript - 为什么 WebRTC 仅在第二次提供后才建立连接?

javascript - 使用下拉菜单滑动的水平菜单

javascript - 检查是否已授予对 Web MIDI API 的访问权限?

连接字符串中的 Javascript 构造

javascript - 通过调整页面宽度来更改图像

javascript - Jssor 元素符号导航器未出现

javascript - 如何停止来自 iframe 内容的 javascript 函数?

javascript - 链接跳转到另一个页面引用并触发点击显示一个display none div

javascript - 在图像标签之前插入 anchor 标签 jQuery