jQueryで$(':file').val('')などをしても、実はtype="file"の時は消すことができない。 type="file"のvalueを操作させない。値が入力されても無視するという挙動は HTMLの仕様ではなくて厳密にはブラウザのセキュリティポリシーに基づくものらしいが、 値をどうしても空にしたい時には困った挙動である。 inputのtype="reset"だとtype="file"の値も消すことはできるが、 フォームにあるinputやselect、textareaなどの値まで消してしまうのであまり使えない。 そういう時にはjQueryで $(':file').replaceWith($(':file').clone()) と書くとうまいこと消すことができる。 :fileの部分はもちろん好きなセレクタで構わない。 やってることは単純で、type="file"のコピーを作り