美文网首页我爱编程
VUE上传图片组件遇到的问题

VUE上传图片组件遇到的问题

作者: 汤又歌 | 来源:发表于2018-04-11 19:58 被阅读0次

1、向服务器传送的参数放在input的name里

2、change事件只触发一次

该问题并不是由于change事件失效造成的,是因为uploadByIframe事件中,会把原来的file元素替换成新的file元素,所以之前绑定的change事件就失效了。

重新绑定change事件就可以解决:

$("#" + fileId).change(function() {
    self.uploadByIframe(self.opt);
})

或者增加事件绑定事件监听change事件:

使用jQuery自带的 delegat 方法 --> jQuery 事件 - delegate() 方法

mounted() {
    const self = this;
    if(this.judgeIE9) {
        $("body").delegate(".uploadImg-parent #upFile","change",function() {
            self.uploadByIframe(self.opt);
        })
    }
},

参考链接: 上传文件或图片 type=file change事件只触发一次

3、在IE9下input事件需要双击才能打开上传图片

可以使用一个label标签,labe的for属性指向file文本框。

<label for="upFile">{{uploadText}}</label>
<form id="upFileForm">
    <input name="file" @change='addImg' id="upFile" type="file" accept=".jpg,.png">
</form>

每次上传时,点击label标签,就可以直接触发file控件。

设置CSS时,设置input的样式:

input {
    opacity: 0;
    filter:alpha(opacity=0);
    z-index:1;
    display: none;
    ... ...
}

设置label标签覆盖input标签即可。

4、chrome等浏览器出现不能连续上传同样图片

每次上传之后,重置form,解决不能连续上传两张相同图片的问题。

$('#upFileForm')[0].reset();

5、IE9下上传图片不成功时首先检测代码中是否有console对象,console对象在IE9中会阻塞程序的执行!!!

附使用iframe上传图片代码:

mounted() {
      const self = this;
      if(this.judgeIE9) {
          $("body").delegate(".uploadImg-parent #upFile","change",function() {
              //alert("test");
              self.uploadByIframe(self.opt);
          })
      }
},
methods: {
      uploadByIframe(opt) {  
            const self = this;
            var _opt = {
                url:"",
                dataType:"json",
                fileInputId: "",
                extraData: null
            }
            $.extend(true, _opt, opt);

            var fileId = _opt.fileInputId,
                extraData = _opt.extraData;

            const imgName = document.getElementById(fileId).value;

            var ifraFlag = "iframeForUpload" + new Date().getTime();
            // var ifra = $('<iframe name="' + ifraFlag + '" id="' + ifraFlag + '" style="display: none"></iframe>');
            var ifra = $('<iframe name="' + ifraFlag + '" id="' + ifraFlag + '" style="display: none"></iframe>');
            $("body").append(ifra);

            var fileInputParent = $("#" + fileId).parent();
            var form = $('<form style="display:none"></form>');
            form.attr({
                method: "post",
                enctype: "multipart/form-data",
                action: _opt.url,
                target: ifraFlag
            });
            form.append($("#" + fileId));
            
            $("body").append(form); //ie必须得渲染在页面了才能submit chrome不需要这一步的
            
            form.submit();
            var returnFileInput=form.find("#" + fileId).clone();//复制一份新的 还回去
            fileInputParent.append(returnFileInput); //append走了 上传之后还得还回去
            // 手动添加onchange事件,解决onchange触发一次就失效的问题
            form.remove();
            // $("#" + fileId).change(function() {
            //     console.log('change');
            //     self.uploadByIframe(self.opt);
            // })
            
            $("#" + ifraFlag).load(function() {
                var iframeContents = this.contentWindow.document.body.innerHTML,resData;
                switch(_opt.dataType){
                    case "text":
                        resData = iframeContents;
                        break;
                    case "json":
                        try{
                            resData = JSON.parse(iframeContents);
                        }catch(err){
                            resData = null;
                        }
                        break;              
                }
                if(iframeContents.search("\"status\":200") >0 &&iframeContents.search("key") > 0) {
                    // 请求成功后执行的操作
                } 
                $(this).remove();
            })
        },
}

相关文章

  • VUE上传图片组件遇到的问题

    1、向服务器传送的参数放在input的name里 2、change事件只触发一次 该问题并不是由于change事件...

  • 安卓版微信 input onchange事件不生效

    做Vue 图片上传控件,遇到无法上传的问题,表现未选择图片后无法触发change事,问题原因最终锁定在input ...

  • Vue+ElementUI+NodeJs图片上传

    一、将图片上传到服务器 1、添加图片上传框 在Vue组件的表单中添加图片上传框 其中: action:图片上传到服...

  • vue+koa做图片上传

    vue图片上传,使用elementui上传组件前端选择图片后,立即上传(也可以手动上传)后台koa监听请求路由,处...

  • VUE 图片上传组件

    工作中遇到的需求 和大家分享下 以下代码演示完成图片上传组件 注意 使用VUE1框架 VUE2 已经废弃 DISP...

  • 2022-08-18

    vue中组件之间的通信 组件可以有以下几种关系: [图片上传失败...(image-8918e-166082302...

  • vue_upload上传图片多选、拖拽上传

    vue_upload上传图片支持多选、拖拽上传 组件链接:http://www.jq22.com/jquery-i...

  • vue mintui组件:多图片上传

    vue图片上传组件,实现批量上传和单张上传功能,控制图片大小,数量,以及压缩处理,利用了mint-ui的提示框监听...

  • Vue图片裁剪上传组件

    本组件基于vuejs框架, 使用ES6基本语法, css预编译采用的scss, 图片裁剪模块基于cropperjs...

  • vue文件上传(单文件以及多文件)

    使用vue就有很多UI组件,我用的是element。但是element和其他的组件都是图片单次上传,而且比较麻烦,...

网友评论

    本文标题:VUE上传图片组件遇到的问题

    本文链接:https://www.haomeiwen.com/subject/pswzhftx.html