html input的file文件输入框onchange事件触发一次失效解决方法

最近在做一个图片上传的功能,出现提交一次后,file输入框的change事件无法再次触发的bug,就是说提交一次后必须刷新才能再次提交,这就坑了~

于是想办法解决它~

在网上找了一些资料,找到这几种方法:

1、替换掉原来的input框
2、remove原来的input框,然后在添加进新的一样的input框

我测试了之后发现可以用下面的方法解决这个问题:
第一步:上传完成后替换掉原来的input框
第二步:重新绑定onchange事件

问题解决!!

代码如下:

 

 1 <script>
 2         $(document).ready(function () {
 3             /* jquery handleError版本兼容 */
 4             jQuery.extend({
 5                 handleError: function (s, xhr, status, e) {
 6                     if (s.error) {
 7                         s.error.call(s.context || s, xhr, status, e);
 8                     }
 9                     if (s.global) {
10                         (s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]);
11                     }
12                 },
13                 httpData: function (xhr, type, s) {
14                     var ct = xhr.getResponseHeader("content-type"),
15                         xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
16                         data = xml ? xhr.responseXML : xhr.responseText;
17                     if (xml && data.documentElement.tagName == "parsererror")
18                         throw "parsererror";
19                     if (s && s.dataFilter)
20                         data = s.dataFilter(data, type);
21                     if (typeof data === "string") {
22                         if (type == "script")
23                             jQuery.globalEval(data);
24                         if (type == "json")
25                             data = window["eval"]("(" + data + ")");
26                     }
27                     return data;
28                 }
29             });
30 
31             /* file输入框变化时调用上传图片函数 */
32             $(".myFile").change(function(){
33                 var objId = $.trim($(this).attr('id'));
34                 myUpload(objId);
35             });
36             /* 上传函数 */
37             function myUpload(objId)
38             {
39                 var _obj = $('#'+objId);
40                 var objVal = $.trim(_obj.val());
41                 if(!objVal){
42                     alert('你还未选择图片!');
43                     return false;
44                 }
45                 $.ajaxFileUpload({
46                     type: "post",
47                     url: "upload.do",
48                     secureuri:false,
49                     fileElementId:objId,
50                     dataType: "json",
51                     success: function(result) {
52                         if (result.code == "1") {
53                             alert("上传文件成功!");
54                         }
55                     },
56                     complete: function(xmlHttpRequest) {
57                         _obj.replaceWith('<input type="file" class="myFile" id="'+objId+'" name="'+objId+'" style="display:none;"/>');
58                         $("#"+objId).on("change", function(){
59                             myUpload(objId);
60                         });
61                     },
62                     error: function(data, status, e) {
63                         alert("文件上传失败!");
64                     }
65                 });
66                 return false;
67             }
68         });
69     </script>

 

代码文本如下:

<script>
$(document).ready(function () {
/* jquery handleError版本兼容 */
jQuery.extend({
handleError: function (s, xhr, status, e) {
if (s.error) {
s.error.call(s.context || s, xhr, status, e);
}
if (s.global) {
(s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]);
}
},
httpData: function (xhr, type, s) {
var ct = xhr.getResponseHeader("content-type"),
xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
data = xml ? xhr.responseXML : xhr.responseText;
if (xml && data.documentElement.tagName == "parsererror")
throw "parsererror";
if (s && s.dataFilter)
data = s.dataFilter(data, type);
if (typeof data === "string") {
if (type == "script")
jQuery.globalEval(data);
if (type == "json")
data = window["eval"]("(" + data + ")");
}
return data;
}
});

/* file输入框变化时调用上传图片函数 */
$(".myFile").change(function(){
var objId = $.trim($(this).attr('id'));
myUpload(objId);
});
/* 上传函数 */
function myUpload(objId)
{
var _obj = $('#'+objId);
var objVal = $.trim(_obj.val());
if(!objVal){
alert('你还未选择图片!');
return false;
}
$.ajaxFileUpload({
type: "post",
url: "upload.do",
secureuri:false,
fileElementId:objId,
dataType: "json",
success: function(result) {
if (result.code == "1") {
alert("上传文件成功!");
}
},
complete: function(xmlHttpRequest) {
_obj.replaceWith('<input type="file" class="myFile" id="'+objId+'" name="'+objId+'" style="display:none;"/>');
$("#"+objId).on("change", function(){
myUpload(objId);
});
},
error: function(data, status, e) {
alert("文件上传失败!");
}
});
return false;
}
});
</script>

 

done!

 

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- import CSS --> <link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.15.9/theme-chalk/index.css "> <style> body{ margin: 0;/*去掉自带外边距*/ background-image: url("imgs/bg.jpg"); /*cover设置封面效果*/ background-size: cover; text-align: center; } h1{ font-size: 72px; color: #0096dc; margin-bottom: 0; } img{width: 100px} h2{ font-size: 32px; color: #0096dc; margin-bottom: 0; } </style> </head> <body> <div id="app"> <h1>欢迎来到品珂优选</h1> <img src="imgs/shark.png" alt=""> <h2>Selective Preference</h2> <el-card style="width: 600px;height: 300px;margin: 0 auto; background-color: rgba(255,255,255,0.3)"> <el-form label-width="60px" style="width: 400px;margin:40px auto"> <el-form-item label="用户名"> <el-input type="text" name="username" placeholder="请输入用户名"></el-input> </el-form-item> <el-form-item label="密码"> <el-input type="password" name="password" placeholder="请输入密码"></el-input> </el-form-item> <el-form-item> <el-checkbox>记住用户名和密码</el-checkbox> </el-form-item> <el-form-item> <el-button style="position: relative;right: 30px" type="primary">登录</el-button> </el-form-item> </el-form> </el-card> </div> </body> <!-- import Vue before Element --> <script src="https://cdn.staticfile.org/vue/2.6.14/vue.min.js "></script> <!-- import JavaScript --> <script src="https://cdn.staticfile.org/element-ui/2.15.9/index.min.js "></script> <script> let v = new Vue({ el: '#app', data: function() { return { user:{username:"",password:"",nick:"",id:"",rem:false} } }, methods:{ login(){ axios.post("/login",v.user).then(function (response) { if (response.data == 1) { location.href="/admin.html"; }else if (response.data == 2) { v.$message("用户名不存在"); } else if (response.data==3) { v.$message("密码错误"); } }) } }, created:function () { //取出Cookie里面的用户名和密码显示到页面中 //'password=123; username=Tom' let arr = document.cookie.split(";"); //遍历数组 for (let cookie of arr) { let cookieArr = cookie.split("="); let key = cookieArr[0].trim(); let value = cookieArr[1]; if (key == "username") { this.user.username = value; } if (key == "password") { this.user.password = value; } } }, }) </script> </html>为什么输入框输入不进去东西,是少了什么代码
最新发布
06-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值