js如何清空input?file的值
js清空input file的值
在做選擇本地圖片上傳的功能時遇到一個問題,第一次點file按鈕選擇圖片完成會觸發(fā)onchange事件,獲取文件后動態(tài)在界面上創(chuàng)建img標簽展示,但把創(chuàng)建的img元素節(jié)點刪除后,再點file按鈕選擇同一個文件后發(fā)現(xiàn)圖片并沒有被重新創(chuàng)建出來。
分析了原因
因為上一次選擇的文件與本次選擇的是同一個文件,兩次的路徑值相同,值沒有改變所以導致file不會觸發(fā)onchange事件,因此需要每次創(chuàng)建完img后重置file的value或者重置file的dom來解決這個問題。
方案一
每次創(chuàng)建完img后把file的value值重置為空字符串(設其它值會報錯)
提示:瀏覽器的安全機制不允許直接用js修改file的value為空字符串以外的值,強制修改會報以下錯誤:
VM4061:1 Uncaught DOMException: Failed to set the ‘value’ property on ‘HTMLInputElement’: This input element accepts a filename, which may only be programmatically set to the empty string.
var file = document.getElementById('file'); file.value = ''; //file的value值只能設置為空字符串
方案二
每次創(chuàng)建完img后把file的outerHTML重置
var file = document.getElementById('file'); file.outerHTML = file.outerHTML; //重置了file的outerHTML
純js清空input File
function cleanFile(id){ var _file = document.getElementById(id); if(_file.files) _file.value = ""; else{ if (typeof _file != "object") return null; var _span = document.createElement("span"); _span.id = "__tt__"; _file.parentNode.insertBefore(_span,_file); var tf = document.createElement("form"); tf.appendChild(_file); document.getElementsByTagName("body")[0].appendChild(tf); tf.reset(); span.parentNode.insertBefore(_file,_span); _span.parentNode.removeChild(_span); _span = null; tf.parentNode.removeChild(tf); } }
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
實例詳解JavaScript中setTimeout函數(shù)的執(zhí)行順序
關于javascript的運行機制大家都應該有所了解了吧,其實javascript是一個單線程的機制,但是因為隊列的關系它的表現(xiàn)會讓我們感覺是一個多線程的錯覺。下面這篇文章通過實例主要給大家介紹了關于JavaScript中setTimeout函數(shù)執(zhí)行順序的相關資料,需要的朋友可以參考下。2017-07-07從零使用TypeScript開發(fā)項目打包發(fā)布到npm
這篇文章主要介紹了從零使用TypeScript開發(fā)項目打包發(fā)布到npm,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02微信小程序如何調(diào)用json數(shù)據(jù)接口并解析
這篇文章主要介紹了微信小程序如何調(diào)用json數(shù)據(jù)接口并解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-06-06javascript:FF/Chrome與IE動態(tài)加載元素的區(qū)別說明
今天在寫一段js時,發(fā)現(xiàn)IE與FF在動態(tài)加載Html元素時,有一些差別,一起過來看看下面的代碼吧2014-01-01