【问题标题】:JS function to change image on page with file uploadJS函数通过文件上传更改页面上的图像
【发布时间】:2023-03-03 09:44:02
【问题描述】:

我目前对代码一无所知,目前我正在自学。当用户选择要上传的文件时,我希望能够更改网页上的图像。有很多这样的例子,我一直在玩答案Show an image preview before upload

但是,我有一个包含多个上传按钮的页面,每个按钮都有自己的关联图像。上面的示例监视特定输入文件元素的更改,然后触发并更新图像元素。

我正在尝试基于上述创建一个 JS 函数,我将上传的文件对象和图像元素 id 传递给,由文件输入元素的 onChange 事件调用。

感觉好像应该很简单,但它突出了我的严重缺乏理解。非常感谢任何帮助。

编辑:

我试过了(请不要笑……)

HTML

<input type="file" id="file_n" onChange="swapImage(this,'image_n)/>
<img id="image_n" />

Javascript

function swapImage(e1, imgID) {
    var reader = new FileReader();

    reader.onload = function (e1) {
        // get loaded data and render thumbnail.
        document.getElementById(imgID).src = e.target.result;
    };

    // read the image file as a data URL.
    reader.readAsDataURL(this.files[0]);
};

为了清楚 file_n 和 image_n 应该代表每个的倍数,例如file_1、file_2、file_3 和对应的 image_1、image_2、image_3,因此在我看来,为什么将它们传递给函数似乎是可行的方法。

【问题讨论】:

  • 到目前为止,您在代码方面尝试过什么?可以发在这里吗?
  • 我的主要问题是我缺乏 JS 技能。我正在尝试使用我链接到的原始代码,但不知道如何使它工作我;将我的尝试添加到上面的原始帖子中
  • 这是一个为您提供正确变量命名的工作示例:jsfiddle.net/qzksc9o1/1
  • 谢谢,但这与我最初链接的源相同,因为它仍然链接到 1 个图像 ID 和 1 个输入文件 ID。

标签: javascript php html


【解决方案1】:

以下是预览图像的基础知识。

var m, f, v;

f = document.getElementById("files");
v = document.getElementById("viewport");

f.addEventListener("change", function(e){
	m = new FileReader();
	m.onload = function(e){
		v.src = e.target.result;
	};
	m.readAsDataURL(this.files[0]);
});
#viewport{
    width: 250px;
    height: 250px;
}
<img id="viewport" />

<input type="file" id="files" />
<img id="image" />

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点,具体取决于您的 DOM 的外观。例如,在文件输入后查询第一个 img 或其父子元素,使用 id、数据集查询正确的 img 元素,使用 img 的 id 作为第二个参数传入 img 元素 swapImage(this, image_n)(所有不覆盖任何全局变量的 DOM id 都可以在不使用任何查询选择器的情况下访问)

    var URL = window.URL || window.webkitURL
    
    window.swapImage = function (elm) {
      var index = elm.dataset.index
      // URL.createObjectURL is faster then using the filereader with base64
      var url = URL.createObjectURL(elm.files[0])
      document.querySelector('img[data-index="'+index+'"]').src = url
    }
    <input type="file" data-index="0" onChange="swapImage(this)">
    <img src="https://dummyimage.com/50x50/000/fff" data-index="0" width="50" height="50">
    
    <br><br>
    
    <input type="file" data-index="1" onChange="swapImage(this)">
    <img src="https://dummyimage.com/50x50/000/fff" data-index="1" width="50" height="50">
    
    <br><br>
    
    <input type="file" data-index="2" onChange="swapImage(this)">
    <img src="https://dummyimage.com/50x50/000/fff" data-index="2" width="50" height="50">

    【讨论】:

    • 这正是我所追求的,非常感谢。我现在可以使用 php 生成页面,并在创建页面时向输入和图像添加唯一的数据索引值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2013-02-08
    • 1970-01-01
    • 2013-08-25
    • 2012-05-16
    相关资源
    最近更新 更多