tl; dr : para navegadores modernos, solo use
input.value = '';
Vieja respuesta:
Qué tal si:
input.type = "text";
input.type = "file";
Todavía tengo que entender por qué esto no funciona con webkit .
De todos modos, esto funciona con IE9>, Firefox y Opera.
La situación con webkit es que parece que no puedo volver a cambiarlo a archivo.
Con IE8, la situación es que arroja una excepción de seguridad.
Editar:
para webkit, Opera y firefox esto funciona, sin embargo:
input.value = '';
(verifique la respuesta anterior con esta propuesta)
Veré si puedo encontrar una manera más limpia de hacer este navegador cruzado sin la necesidad del GC.
Edit2:
try{
inputs[i].value = '';
if(inputs[i].value){
inputs[i].type = "text";
inputs[i].type = "file";
}
}catch(e){}
Funciona con la mayoría de los navegadores. No funciona con IE <9, eso es todo.
Probado en Firefox 20, Chrome 24, Opera 12, IE7, IE8, IE9 e IE10.