2011-01-19 18 views
20

Tengo el siguiente códigopuesto inmediatamente después de seleccionar un archivo

<form action="/script/upload_key.py" method="POST" enctype="multipart/form-data"> 
    Key filename: <input name="file_1" type="file"> 
    <input name="submit" type="submit"> 
</form> 

HTML que me da el siguiente material.

alt text

Me preguntaba

  1. ¿Cómo puedo usar JavaScript, para eliminar la necesidad de Submit botón. Eso significa, una vez que yo Choose File, el archivo seleccionado se cargará de inmediato?
  2. ¿Cómo puedo asegurarme de que el campo para mostrar el nombre del archivo seleccionado sea lo suficientemente largo para que ... no se muestre?
+1

¿Por qué desea omitir el botón Enviar? Y, si administra el # 1, el # 2 no importará porque el usuario será redirigido inmediatamente después de que elijan el archivo. –

+1

Así que, tan pronto como accidentalmente elijo el archivo incorrecto, se cargará sin que yo tenga que confirmar que deseo que se cargue el archivo incorrecto presionando el botón de enviar. –

Respuesta

35

para enviarlo de inmediato, simplemente hacer esto:

<input name="file_1" type="file" onchange="this.form.submit();"> 

si está utilizando jQuery:

$("input[name='file_1']").change(function() { this.form.submit(); }); 

Sobre sus otras preguntas:

1) Hay muchas método está más allá y ... por ejemplo:

http://valums.com/ajax-upload/

http://www.webtoolkit.info/ajax-file-upload.html

(y muchos más. Solo busque google: "Carga de archivo Ajax" o "carga de archivo iframe")

2) No se preocupe por el ancho del campo. Como no sabes cuánto tiempo puede ser el camino, nunca será lo suficientemente largo (creo). También los navegadores pueden mostrarlo de manera muy diferente. Por ejemplo, Safari o Chrome lo muestran muy diferente de Firefox o IE. Simplemente use la longitud predeterminada o la que se ve mejor con su diseño.

+2

No necesitas el prefijo "javascript:" dentro de los atributos de onevent –

+0

Se produce un error en ie8 con acceso denegado en la llamada a enviar. –

2

Para el primero de ellos:

<input name="file_1" type="file" onchange="this.form.submit()"> 

no estoy seguro acerca de hacer el campo lo suficientemente amplia sin embargo. A veces, CSS está paralizado en los campos de carga de archivos para evitar explotaciones.

+0

Generalmente, para aplicar estilo a las entradas de archivos, debe emplear el truco de colocar un elemento de entrada de archivo fantasma transparente sobre algunos elementos ficticios que se vean de la manera que usted desea. – Pointy

+0

Lo hice una vez hace mucho tiempo y desde entonces he decidido que generalmente es mejor mantener las entradas de formulario como las personas esperarían de la forma en que se representan de forma nativa. Aquí está la guía si realmente quieres hacerlo de esta manera: http://www.quirksmode.org/dom/inputfile.html – scragz

0

cálculo aproximado de lo que usted quiere - cuando el campo de texto cambia se activará el formulario de presentación

$('.target').change(function() { 
    document.forms["myform"].submit(); 
}); 

Edit: Lo siento, he utilizado jQuery ...

Si envía el formulario en cambio, no notará que el campo se ha llenado y, por lo tanto, no debería necesitar cambiar la longitud del texto. Si desea, me gustaría tener el recuento de caracteres de la cadena en el campo y luego aplicar un atributo de tamaño a la entrada

mylength = document.getElementById('myfield').value 
document.getElementById('myfield').size = mylength; 
Cuestiones relacionadas