input on-change事件触发失效和重复上传相同文件失效bug

问题1: 在使用angularJs情况下, 使用input标签 配合 ng-change 无效,为什么原生的 input的onchange事件有效?

问题2: 使用input标签 文件上传svg之后,然后再上传用同一个svg文件,没有任何反应?

问题1:

原因:首先 ng-change事件要与ng-model绑定,但是在input type类型为file的时候ng-change是无效,所以我们可以这样写

<input type="file" class="inputBtn" accept="image/svg+xml" onchange="angular.element(this).scope().vm.inputChange(files)">
vm.inputChange = function (files) {
	var file = files[0];
	if (!file) {
		throw new Error("Failed to get file");
	}
	//创建读取文件对象
	var reader = new FileReader();
	//将文件读取为文本格式
	reader.readAsText(file);
	reader.onload = function (e) {
		console.log(e.target.result);
	}
}

还是要用原生的onchange事件,然后取到input元素的scope对象,再把方法绑到vm控制器上

问题2:

原因:文件上传通过onchange触发,第一次上传会有个value值,第二次上传后,会和之前的value值进行对比,相同的话就不会触发onchange,下面有两种方法可以解决这个问题!


方法1:每次点击的时候去清空input value值
vm.click = function (event) {
	event.target.value = "";
}
方法2:点击的时候把type类型设置为"file",当上传完成后把type类型设置为"text"
//点击的时候设置为file类型
vm.click = function (event) {
	$(event.target).attr("type", "file")
}

vm.inputChange = function (event, files) {
	console.log(event, files)
	var file = files[0];
	if (!file) {
		throw new Error("Failed to get file");
	}
	//创建读取文件对象
	var reader = new FileReader();
	//将文件读取为文本格式
	reader.readAsText(file);
	reader.onload = function (e) {
		//拿到文件后把input设置成text类型
		$(event.target).attr("type", "text")
		console.log(e.target.result);
	}
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值