input file样式是不可以修改的,所以我们做到的是隐藏掉默认的input,
然后自己写一些按钮样式,用事件代理做点击事件完美解决;
//事件代理点击,获取file文件名; $(document).on("click", ".fileinput>span", function() { $(".fileinput>input").click(); var str = ""; $("#upfile").unbind().on("change", function() { var obj = document.getElementById("upfile"); var length = obj.files.length; console.log(length); if(length == 0) { str += '<i class="FileArea">' + 未选择任何文件 + '</i>'; } else { for(var i = 0; i < length; i++) { $(".FileArea").html(""); var temp = obj.files[i].name; console.log(temp); str += '<i class="FileArea">' + temp + '</i>'; } } $(".fileinput").append(str); }); })
要注意的是为什么要加上unbind()这个方法!
为什么要加这个方法呢
file input出于安全角度,是不允许赋值的,即使是置空,虽然通过给outerHtml赋值可以清空,但貌似仅在ie下起使用。
所以只能重置这个方法达到情况的目的