我正在try 加载用户通过元素 Select 的图像.

我向输入元素添加了一个onchange事件处理程序,如下所示:

<input type="file" name="picField" id="picField" size="24" onchange="preview_2(this);" alt=""/>

PREVIEW_2函数为:

var outImage ="imagenFondo";
function preview_2(what){
    globalPic = new Image();
    globalPic.onload = function() {
        document.getElementById(outImage).src = globalPic.src;
    }
    globalPic.src=what.value;
}

其中outImage具有我希望加载新图片的标记的id值.

但是,onload似乎从未发生过,并且它没有向html加载任何内容.

我该怎么办?

推荐答案

在支持File API的浏览器中,一旦用户 Select 了文件,就可以使用FileReader构造函数来读取文件.

实例

document.getElementById('picField').onchange = function (evt) {
    var tgt = evt.target || window.event.srcElement,
        files = tgt.files;

    // FileReader support
    if (FileReader && files && files.length) {
        var fr = new FileReader();
        fr.onload = function () {
            document.getElementById(outImage).src = fr.result;
        }
        fr.readAsDataURL(files[0]);
    }

    // Not supported
    else {
        // fallback -- perhaps submit the input to an iframe and temporarily store
        // them on the server until the user's session ends.
    }
}

浏览器支持

  • IE 10
  • Safari 6.0.2
  • chromium 7
  • Firefox 3.6
  • 歌剧12.02

在不支持File API的情况下,您无法(在大多数具有安全意识的浏览器中)从文件输入框获取文件的完整路径,也无法访问数据.唯一可行的解决方案是将表单提交到隐藏的iFrame,并将文件预先上传到服务器.然后,当请求完成时,您可以将图像的src设置为上传文件的位置.

Html相关问答推荐

迪夫导航栏的一些组件显示在导航栏之外,有人能帮助我解决这个问题吗?

Flexbox响应式图像不会缩小

CSS Flex行之间的空间很大

如何在angular 17.2中使用routerLink解决此错误

CSS自定义特性中的URL是否可以相对于定义的CSS文件?

通过POST方法提交html表单时CSV文件无法通过(在使用Django的上下文中)

通过动态div的对角线

Firefox和Chrome在文字装饰和文字阴影方面的不同优先顺序

需要帮助创建一个简单的html css网格布局

如何在网格中拥有离散的行

在Vue 3中使用v-Bind将计算(computed)属性传递给css url()

顶部有文字的图像的悬停效果

当底部进入视图时从底部粘性定位

如何在悬停时更改同级元素 CSS

按钮位于主 div 的底部而不是内部 Div

这两个CSS中的网格居中对齐内部盒子有什么区别?

拨动switch 在重新加载时未重置

HTML 如何根据屏幕尺寸调整/裁剪视频背景?

在 jinja 模板内的 html 表中嵌套 For 循环

是否可以设置用户在联系表单中输入的文本字体的样式